ルート証明書とリーフがあります。リーフには、有効なオンライン ロケーションを指す CRL URL OID 拡張子があります。これを行う:
certutil -verify .\leaf.cer
で失敗します
エラー: 返されたリーフ証明書失効ステータスの検証中 失効サーバーがオフラインだったため、失効関数は失効を確認できませんでした。0x80092013 (-2146885613 CRYPT_E_REVOCATION_OFFLINE)
私がこれを行う場合:
certutil -verify .\leaf.cer .\root.cer
その後、検証に合格し、CRL が Fiddler でオンラインから取得されていることがわかります。
私の C# コードでは、次のようにします。
X509Chain childCertChain = new X509Chain();
childCertChain.ChainPolicy.ExtraStore.Add(rootCert);
childCertChain.ChainPolicy.RevocationMode = X509RevocationMode.Online;
childCertChain.ChainPolicy.UrlRetrievalTimeout = TimeSpan.FromSeconds(10);
if (!childCertChain.Build(childCert))
{
// The root cert is not in the windows certificate store, that is fine
if (childCertChain.ChainStatus.Length != 1 || childCertChain.ChainStatus.First().Status != X509ChainStatusFlags.UntrustedRoot)
{
throw new Exception("Certificate validation error.");
}
}
これにより例外が発生し、chainElements に 2 つの証明書が正しく入力されていても、ChainStatus には次のように表示されます。
OfflineRevocation、RevocationStatusUnknown
また、Fiddler に Web リクエストが表示されません。URL を指定してプログラムで CRL をダウンロードできるので、私のデバッグ環境ではありません。x509Chain.Build を成功させる方法はありますか?