证书撤销如何与中间CA一起使用?

use*_*574 10 ssl openssl certificate-revocation ssl-certificate x509certificate

假设PKI层次结构如下所示.

root CA ==> inter-1 CA ==> user-1
  \
   \======> inter-2 CA ==> user-2
Run Code Online (Sandbox Code Playgroud)

我的问题是:root CA是否还需要定期从其子代下载CRL:inter-1和inter-2?

由于user-1和user-2可以相互认证,如果inter-2撤销了user-2的证书,则inter-2应该让root知道然后传播到inter-1和user-1,对吧?

如果是这样,那似乎很复杂.是否有任何工具可用于管理撤销逻辑?非常感谢.

Jcs*_*Jcs 18

不,证书的撤销不会通过CA树传播.每个CA(在您的情况下为根和中间)负责发布CRL,其中包含此CA颁发的已吊销证书的列表.

一个例子:

根CA为根CA颁发的证书发布CRL:inter-1 CA和inter-2 CA. 根CA不知道user-1和user-2证书或其撤销状态.

inter-1 CA(resp inter-2 CA)发布一个CRL,其中包含由1个CA(resp inter-2 CA)颁发的已撤销证书列表,并且仅包含这些证书.

CRL Root CA   CRL inter-1 CA 
  ^             ^
  |             |
root CA ==> inter-1 CA ==> user-1
  |
  |           CRL inter-2 CA 
  |             ^
  \             |
   \======> inter-2 CA ==> user-2
Run Code Online (Sandbox Code Playgroud)

如果撤销了用户1证书,则该证书(实际上是其序列号)将仅出现在由1个CA发布的CRL中.

当有人想要检查用户1证书的有效性时,该过程如下:

  1. 在证书和可信CA之间构建证书链:user-1/inter-1 CA/root CA.
  2. 获取列表中第一个证书的CRL
  3. 验证CRL的签名
  4. 根据此CRL检查列表中第一个证书的状态
  5. 如果状态未被撤销,请从列表中删除证书并转到2.否则失败
  6. 如果列表仅包含受信任的CA,请检查证书的签名链(证书必须由列表中的以下证书签名)
  7. 如果所有签名都已经过检查并且有效,则用户1证书有效.

请注意,验证CRL签名可以触发另一个证书链的验证:即此算法可以是递归的.实际上X.509证书验证算法(非常)很复杂,我只是总结了这里的原理.