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

Aru*_*mar 14 openssl

使用OpenSSL库,如何检查对等证书是否被撤销.从我用谷歌搜索:

  1. x509 cerfiticate包含一组crl分发点,即url集
  2. 从这些网址下载crl
  3. crl包含已撤销的证书的序列号
  4. 如果对等证书序列号在crl列表中,那么它将被撤销

我用什么OpenSSL API来完成这个?此外,这是检查证书是否被撤销的正确方法吗?

Mat*_*ard 16

不幸的是,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可能使实现复杂化(尤其是wrt缓存).
  • 等等

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

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


Jon*_*tez 2

检查这个线程:

OpenSSL 现在是否自动处理 CRL(证书吊销列表)?

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