【问题标题】:Openssl - How to check if a certificate is revoked or notOpenssl - 如何检查证书是否被吊销
【发布时间】:2010-05-26 13:37:43
【问题描述】:

使用 OpenSSL 库,我如何检查对等证书是否被吊销。 根据我的谷歌搜索:

  1. x509 证书包含一组crl分发点,即一组url
  2. 从这些 url 下载 crl
  3. crl 包含已撤销证书的序列号
  4. 如果对等证书序列号在 crl 列表中,则将其撤销

我使用哪些 OpenSSL API 来完成此任务?另外,这是检查证书是否被吊销的正确方法吗?

【问题讨论】:

标签: openssl


【解决方案1】:

很遗憾,OpenSSL 中的 CRL 验证 API 不是很高级,所以您需要自己进行很多操作。

关于所需内容的简要概述:

  • 从证书中检索 CRL URL 以从 CRL 分发点扩展进行验证。 OpenSSL 提供证书解析功能,但没有简单的 CRL 分发点访问器
  • 从 URL 下载 CRL。 OpenSSL 没有实现这一点,也没有任何形式的缓存。
  • 验证 CRL(签名、颁发者 DN、有效期、主题密钥标识符等)。 OpenSSL 提供了不同的低级功能。
  • 验证要检查的证书的序列号是否在 CRL 中。

当然,这应该在检查证书本身是否“有效”(即它是由受信任的(或可信赖的)CA 颁发的,它具有正确的使用扩展,并且它(连同它的信任)链)在其有效期内。 OpenSSL 有一些低级和中级功能可以帮助解决这个问题。

一些额外的细节可能会使完全通用的实现变得复杂:

  • 某些证书可能使用 OCSP 而不是 CRL。
  • 某些证书将 LDAP DN 或 URL 作为分发点。
  • 某些 CRL 由委托的 CRL 签名者签名。
  • Delta-CRL 或分区 CRL 可能会使实现复杂化(尤其是 w.r.t. 缓存)。

RFC 5280 描述了完整的 PKIX 验证算法。您不必实现所有内容,但它是一个很好的参考,可以检查您是否忘记了一些重要的事情。您应该查看 mod_ssl(包含在 Apache httpd 服务器中)模块以了解在本地检查 CRL 并实施 OCSP 检查的实现。

如果您事先知道您信任哪些 CA(从安全角度来看更好),那么您可以有一个 cron 作业来下载和更新 CRL。这将使您免于在程序中实施有关定位/下载/缓存 CRL 的部分。

【讨论】:

    【解决方案2】:

    检查此线程:

    Does OpenSSL automatically handle CRLs (Certificate Revocation Lists) now?

    X509_STORE 支持 CRL 处理。您可以使用 PEM_read_bio_X509_CRL 命令从 X509 证书中提取 CRL,链接中没有说明。

    【讨论】:

      猜你喜欢
      • 2019-04-23
      • 1970-01-01
      • 1970-01-01
      • 2013-04-21
      • 1970-01-01
      • 2016-11-13
      • 2019-03-17
      • 2018-01-15
      • 1970-01-01
      相关资源
      最近更新 更多