6

エンタープライズ プロジェクト (イントラネットのみ) に関連して、.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());

質問:

証明書を検証したい場合、これがルート証明書であると仮定して、チェーンをチェックし、チェーンの最後のものを検証する必要がありますか?

それを行うより良い方法はありますか?

4

2 に答える 2

2

Maarten Bodewes の回答に加えて:

チェーンが有効かどうかを簡単に確認するには、次のコードを使用できます。

X509Certificate2 Certificate = new X509Certificate2( "Certificate.pfx" );
X509Chain CertificateChain = new X509Chain();
//If you do not provide revokation information, use the following line.
CertificateChain.ChainPolicy.RevocationMode = X509RevocationMode.NoCheck;
bool IsCertificateChainValid = CertificateChain.Build( Certificate );

IsCertificateChainValid は、証明書チェーンが正しい場合に true を返します。false を返す場合は、使用できます

CertificateChain.ChainStatus

ステータスが無効な理由については、可能な値には、NotTimeValid、UntrustedRoot があります。

于 2015-04-09T00:22:41.880 に答える
2

はい、信頼の連鎖を作成する必要があります。これは、信頼できる証明書までさかのぼって追跡する必要があることを意味します。これはルート証明書である必要はありませんが、中間証明書ではなくルート証明書を信頼するのが一般的です。単一の証明書を持つ単一のエンティティのみを許可したい場合があります。それが正しい証明書であることが確実である限り、その単一のリーフ証明書を単純に信頼することができるため、「チェーン」は単一の証明書で構成されます。この例として、Web サービスで使用されることがある自己署名ルート証明書があります。

証明書チェーンの検証は、証明書の全体的な検証の一部にすぎないことに注意してください。証明書が取り消されていないこと、証明書がまだ有効であること (発効日と有効期限の間) を確認する必要があります。場合によっては、証明書を検証するための追加の独自のルールもあります。たとえば、データベース内の証明書 ID の存在 - ホワイトリスト/ブラックリストなどです。

于 2013-02-13T22:18:07.660 に答える