如果您撤销证书颁发机构的证书,它颁发的所有证书是否也会失效?由其下属机构颁发的证书呢?
例如,如果根 CA A 颁发中间 CA B,后者颁发证书 C,并且:
- CA A撤销CA B,证书C是否失效?
- CA A 被吊销(不知何故),它的吊销是否一直沿链向下级联,以至于证书 C 现在也无效?
如果您撤销证书颁发机构的证书,它颁发的所有证书是否也会失效?由其下属机构颁发的证书呢?
例如,如果根 CA A 颁发中间 CA B,后者颁发证书 C,并且:
CA
A
吊销 CAB
,证书是否C
失效?
是的,撤销级联到树。如果 CA 证书被吊销,则所有低于 CA 的证书(无论 CA 低于多少级别)都被隐式视为不受信任。请记住,它们变得*不受信任*,而不是被撤销。
CA
A
被吊销(不知何故),它的吊销是否一直沿链向下级联,以至于证书C
现在也无效?
根 CA 撤销是 RFC5280 中未定义的操作。在这种情况下,CA 将其证书(序列号)放在自己的 CRL 中,并使用自己的密钥进行签名。现在我们有一个鸡蛋问题:
CA 证书被吊销(在 CRL 中列出),但 CRL 是用吊销的密钥签名的,因此我们无法信任此 CRL 并获得有关根证书是否被吊销的明确答案。这个问题通常通过不使用 RFC5280 技术检查根 CA 撤销来解决。例如,在 Microsoft 的证书链接引擎默认配置中,根本不会检查根 CA 证书是否被吊销。
此类情况(根 CA 吊销)的处理方式不同,使用 OOB 流程,通过维护明确受信任的锚点(根证书)列表并从列表中删除错误的 CA 证书。
“这取决于”。
最安全的答案是“是的,它撤销了子树”,因为一旦“B”证书被撤销,就没有理由信任它声称已颁发的任何证书(或它已签署的任何 CRL,等等)。
但这实际上取决于向链构建器提供的输入(这意味着它在应用程序之间不会保持一致)。
.NET 的X509Chain
类默认检查除根之外的所有内容的撤销。Win32 CertGetCertificateChain默认为无撤销(撤销类型必须通过dwFlags
参数指定)。其他库可能有不同的默认值,应用程序可以通过多种方式配置它们。