クライアント証明書で内部的にアプリケーションを認証するために、makecert
アプリケーションを使用してルート証明書とクライアント証明書を作成しました。makecertで証明書失効リスト(CRL)を作成し、pvk2pfxで.pfxにバンドルします。
すべてがうまく動作しますが、私はX509Certificate2 Verify
メソッドを使用するとき、私は次のエラーを取得する:
The revocation function was unable to check revocation for the certificate
X509Certificate2 cert = actionContext.Request.GetClientCertificate();
cert.Verify();
私はX509Chain
を作成することでこれを回避して、RevocationMode = X509RevocationMode.NoCheck
にX509ChainPolicy
を設定することができます。
X509Certificate2 cert = actionContext.Request.GetClientCertificate();
if (cert == null)
{
actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized)
{
ReasonPhrase = "Client Certificate Required"
};
}
else
{
X509Chain chain = new X509Chain();
//Needed because the error "The revocation function was unable to check revocation for the certificate" will happen otherwise
chain.ChainPolicy = new X509ChainPolicy()
{
RevocationMode = X509RevocationMode.NoCheck,
};
try
{
var chainBuilt = chain.Build(cert);
Debug.WriteLine(string.Format("Chain building status: {0}", chainBuilt));
if (chainBuilt == false)
{
actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized)
{
ReasonPhrase = "Client Certificate not valid"
};
foreach (X509ChainStatus chainStatus in chain.ChainStatus)
{
Debug.WriteLine(string.Format("Chain error: {0} {1}", chainStatus.Status, chainStatus.StatusInformation));
}
}
}
catch (Exception e)
{
Debug.WriteLine(e.ToString());
}
}
しかし、これは興味がありました。ある程度、Certificate Revocation List (CRL)
をmakecert
で作成してpvk2pfx
という.pfxにバンドルすると、X509Certificate2 Verify
で受け付けられますか?
「makecert」は廃止予定です:https://msdn.microsoft.com/en-us/library/windows/desktop/aa386968(v=vs.85).aspx。 'X509Certificate2.Verify()'のみに頼りたいのであれば、あなたのアプリケーションは世界規模の有効な証明書を受け入れるため、間違っています。 – Crypt32
@ Crypt32入力していただきありがとうございます。私は、ルートCAから証明書が発行されていることを確認する別の方法があります。検証は、有効な証明書を送信していることを最初に確認することに過ぎません。 – Ogglas
'X509Certificate2.Verify'は、フレームワークで最も無意味なメソッドの1つです。それが 'true'を返す場合は、コンテキスト内で有効かどうかを調べるために、おそらく同じチェーンを構築する必要があります。 'false'を返した場合は、自分自身でチェーンを構築してしまうことになり、"間違い "があなたに関係しているかどうかを判断できます。チェーンオブジェクトを手動で構築するほうが良いです。 – bartonjs