Openssl - 如何检查证书是否被撤销

时间:2010-05-26 13:37:43

标签: openssl

使用OpenSSL库,如何检查对等证书是否被撤销。 从我用Google搜索的内容:

  1. x509 cerfiticate包含一组crl分发点,即url集合
  2. 从这些网址下载crl
  3. crl包含已撤销的证书的序列号
  4. 如果对等证书序列号在crl列表中,那么它将被撤销
  5. 我使用哪些OpenSSL API来完成此任务?另外,这是检查证书是否被撤销的正确方法吗?

2 个答案:

答案 0 :(得分:16)

不幸的是,OpenSSL中的CRL验证API不是很高级,因此您可以自己执行许多操作。

简要概述所需内容:

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

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

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

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

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

如果您事先知道您信任哪些CA(从安全角度来看它更好),那么您可以下载并更新CRL的cron作业。这将使您无法实现有关在程序中查找/下载/缓存CRL的部分。

答案 1 :(得分:1)

检查此主题:

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

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