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