我有一个根证书和一个叶子。叶具有指向有效在线位置的 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,因此它不是我的调试环境 AFAIK。任何想法如何让 x509Chain.Build 成功?