即使清除缓存后,仍要检查证书吊销列表/ OCSP在脱机模式下是否工作

时间:2019-03-06 13:17:13

标签: c# x509 ocsp

我正在编写一些代码来验证证书,并使用X509Chain将其撤消。我正在使用www.wikipedia.org的证书进行测试,并测试代码将使用CRL / OCSP缓存。

        X509Chain chain = new X509Chain();
        // note: this can be offline, using a cached CRL list (but where is it stored??? Do we care???)
        chain.ChainPolicy.RevocationMode = X509RevocationMode.Online;
        chain.ChainPolicy.RevocationFlag = X509RevocationFlag.EntireChain;

        result.IsValid = chain.Build(certificate);

当我使用certutil -urlcache * delete删除缓存,然后使用Wikipedia证书运行上面的代码时,它会进行验证,但是缓存中的新条目对我而言没有意义(运行certutil -urlcache *) 。我得到这些条目:

http://ctldl.windowsupdate.com/msdownload/update/v3/static/trustedr/en/disallowedcertstl.cab

http://ctldl.windowsupdate.com/msdownload/update/v3/static/trustedr/en/authrootstl.cab

http://ctldl.windowsupdate.com/msdownload/update/v3/static/trustedr/en/pinrulesstl.cab

是否还在进行其他级别的CRL / OCSP缓存?即使我使用https://revoked.badssl.com/中的证书进行测试,清除缓存并将撤消模式设置为“脱机”并使计算机脱机,我的验证代码仍然能够确定该证书已被撤消。它从哪里获得这些信息?

这怎么可能? X509Chain是什么用作缓存来进行这些确定的?我的目标是明确显示CRL和OCSP结果是否正在缓存,但它们不会显示在certutil中。

我还阅读到,还有一个系统级CRL缓存,不仅限于当前用途。我还尝试通过运行powershell作为SYSTEM帐户来检查并清除该问题。那里有不同的条目,但是清除该缓存后,我仍然得到相同的结果。 http://powershell-guru.com/powershell-tip-53-run-powershell-as-system/

对于其他测试,我使用certutil验证了cert文件(作为本地用户帐户),然后在cert util显示的缓存中找到了该条目。验证已通过运行以下命令完成:

certutil -f –urlfetch -verify mycertificatefile.cer

.NET Framework / CLR是否将其他位置用于CRL / OCSP缓存?

更新:

因此,我发现使用X509Chain时,仅在证书的根CA位于“受信任的根证书”中时,结果才会显示在缓存中。维基百科证书的根CA不在我的受信任根列表中。 “ GlobalSign根CA -R1。尝试直接在受信任的根中列出的根是DST根CCA X3的新证书确实将​​条目添加到缓存中。同样令人奇怪的是,如果我清除了缓存并尝试验证离线模式下的此新证书,它无法通过验证,但是缓存现在包含该CRL的条目。

0 个答案:

没有答案