我正在尝试使用C#中的X509Chain验证证书尚未撤销。
X509Chain chain = new X509Chain();
chain.ChainPolicy.RevocationMode = X509RevocationMode.Online;
chain.ChainPolicy.RevocationFlag = X509RevocationFlag.EndCertificateOnly;
chain.Build(certificate);
返回状态:
撤销功能无法检查证书的撤销
我确实想检查撤销的证书,而不仅仅是关闭错误。
如何解决此问题或至少更好地了解原因(例如,如何找出检查CRL的位置?)
答案 0 :(得分:6)
撤销检查包括检查CRL中的证书状态以及使用OCSP进行在线状态检查。文档表明.NET只检查CRL,但“在线”可能意味着应该下载CRL。在这种情况下,您的错误可能意味着找不到CRL位置(证书中不存在)或无法访问。
要采取的第一步是检查证书是否包含CRL位置。您可以在证书属性中看到这一点 - 那里有一个CRL分发点扩展。
如果存在CRL位置并且它指向HTTP / HTTPS URL,则可以检查该URL以查看它是否可访问。
不幸的是,虽然这些步骤可以自动化,但它们不会涵盖任何问题的根源 - CRL可能格式不正确或服务器可能不返回CRL(例如,错误响应)或CRL上的签名无效。因此,上述步骤将仅提供有关该问题的基本信息。
我不知道.NET是否能够产生更有意义的故障描述。在我们的组件(SecureBlackbox)中,我们提供了有关故障的更多详细信息,尽管存在关于此主题的广泛的常见问题解答文章,但这个问题仍然是我们经常在技术支持中获得的问题。