不,证书的吊销不会在 CA 树中传播。每个 CA(在您的情况下为根和中间)负责发布 CRL,其中仅包含由该 CA 颁发的已撤销证书的列表。
一个例子:
根 CA 为根 CA 颁发的证书发布 CRL:inter-1 CA 和 inter-2 CA。根 CA 不知道用户 1 和用户 2 证书或其吊销状态。
inter-1 CA (resp inter-2 CA) 发布一个 CRL,其中包含由 inter-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
如果 user-1 证书被吊销,这个证书(实际上是它的序列号)只会出现在 inter-1 CA 发布的 CRL 中。
当有人想检查 user-1 证书的有效性时,过程如下:
- 在证书和可信 CA 之间建立证书链:user-1 / inter-1 CA / root CA
- 获取列表中第一个证书的 CRL
- 验证 CRL 的签名
- 对照此 CRL 检查列表中第一个证书的状态
- 如果状态未被撤销,则从列表中删除证书并转到 2。否则失败
- 如果列表仅包含受信任的 CA,请检查证书的签名链(证书必须由列表中的以下证书签名)
- 如果所有签名都已检查且有效,则 user-1 证书有效。
请注意,验证 CRL 签名可以触发另一个证书链的验证:即该算法可以是递归的。实际上 X.509 证书验证算法是(非常)复杂的,我这里只是总结一下原理。