c# - 撤销功能无法检查证书的撤销

标签 c# x509certificate

我正在尝试使用 C# 中的 X509Chain 验证证书是否未被吊销。

X509Chain chain = new X509Chain();
chain.ChainPolicy.RevocationMode = X509RevocationMode.Online;
chain.ChainPolicy.RevocationFlag = X509RevocationFlag.EndCertificateOnly;
chain.Build(certificate);

返回状态:

The revocation function was unable to check revocation for the certificate

我确实想检查已吊销的证书,而不仅仅是关闭错误。

我该如何解决这个问题或至少更好地了解原因(例如,我如何找出它正在检查 CRL 的位置?)

最佳答案

吊销检查包括检查 CRL 中的证书状态和使用 OCSP 在线检查状态。文档建议 .NET 仅检查 CRL,但“在线”可能意味着应该下载 CRL。在这种情况下,您的错误可能意味着无法找到 CRL 位置(不存在于证书中)或无法到达。

第一步是检查证书是否包含 CRL 位置。您可以在证书属性中看到这一点——那里有一个 CRL 分发点扩展。

如果 CRL 位置存在并且它指向 HTTP/HTTPS URL,您可以检查该 URL 以查看它是否可访问。

不幸的是,虽然这些步骤可以自动执行,但它们没有涵盖问题的任何来源 - CRL 可能格式不正确或者服务器可能返回的不是 CRL(而是错误响应,例如)或 CRL 上的签名无效。所以上面的步骤只会给你关于问题的基本信息。

我不知道 .NET 是否能够对失败产生更有意义的描述。在我们的组件 (SecureBlackbox) 中,我们提供了有关故障的更多详细信息,尽管存在关于该主题的大量常见问题解答文章,但这个问题仍然是我们在技术支持中经常收到的问题。

关于c# - 撤销功能无法检查证书的撤销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13882418/

相关文章:

c# - Azure IoT 中心对其他设备的未经授权访问

ssl - 链接具有相同主题的两个证书

c# - 查询 azure 表中的多个实体

c# - 依赖注入(inject)循环依赖.NET Core 2.0

java - Spring Security x509 身份验证成功

c# - 忽略 JWT 中的签名

c# - 从 C# 中的证书存储中获取证书列表

c# - 是否可以在sql语句中定义表?

c# - 从后面的代码更改 JS 代码

c# - 如何在 MVC5 中使用自定义属性路由重定向到路由