エンタープライズ プロジェクト (イントラネットのみ) に関連して、.net を使用した証明書の検証に関する質問に遭遇しました。System.Security.Cryptography.X509Certificates
ステップ 1:ルート証明書の作成
ルート証明書を作成し、信頼されたルート証明機関makecert
にインストールするために使用します
makecert -r -pe -n "CN=Test Labs (CA)" -ss CA -sr CurrentUser -a sha256 -cy authority -sky signature -sv TestLabCA.pvk TestLabCA.cer
pvk2pfx -pvk TestLabCA.pvk -spc TestLabCA.cer -pfx TestLabCA.pfx
ステップ 2:証明書を作成し、ルート証明書で署名する
makecert
証明書を作成し、ルート証明書で署名し、信頼できる発行元にインストールするために使用します
makecert -pe -n "CN=Test Labs (SPC)" -a sha256 -cy end -sky signature -ic TestLabCA.cer -iv TestLabCA.pvk -sv TestLabSPC.pvk TestLabSPC.cer
pvk2pfx -pvk TestLabSPC.pvk -spc TestLabSPC.cer -pfx TestLabSPC.pfx
ステップ 3:コードで確認する
これは、証明書を検証するための C# コード サンプルです。
X509Certificate2 rootCertificate = new X509Certificate2("TestLabCA.cer");
X509Certificate2 certificate = new X509Certificate2("TestLabSPC.cer");
// will return true
Console.WriteLine("{0}, verified = {1}", rootCertificate.GetName(), rootCertificate.Verify());
// will return false
Console.WriteLine("{0}, verified = {1}", certificate.GetName(), certificate.Verify());
// validate the chain
var chain = new X509Chain();
chain.Build(certificate);
Console.WriteLine("{0}, verified root of chain = {1}", certificate.GetName(), chain.ChainElements[chain.ChainElements.Count-1].Certificate.Verify());
質問:
証明書を検証したい場合、これがルート証明書であると仮定して、チェーンをチェックし、チェーンの最後のものを検証する必要がありますか?
それを行うより良い方法はありますか?