如果您撤销证书颁发机构的证书,它颁发的所有证书是否也会失效?

信息安全 公钥基础设施 x.509
2021-08-13 06:47:13

如果您撤销证书颁发机构的证书,它颁发的所有证书是否也会失效?由其下属机构颁发的证书呢?

例如,如果根 CA A 颁发中间 CA B,后者颁发证书 C,并且:

  • CA A撤销CA B,证书C是否失效?
  • CA A 被吊销(不知何故),它的吊销是否一直沿链向下级联,以至于证书 C 现在也无效?
2个回答

CAA吊销 CA B,证书是否C失效?

是的,撤销级联到树。如果 CA 证书被吊销,则所有低于 CA 的证书(无论 CA 低于多少级别)都被隐式视为不受信任。请记住,它们变得*不受信任*,而不是被撤销。

CAA被吊销(不知何故),它的吊销是否一直沿链向下级联,以至于证书C现在也无效?

根 CA 撤销是 RFC5280 中未定义的操作。在这种情况下,CA 将其证书(序列号)放在自己的 CRL 中,并使用自己的密钥进行签名。现在我们有一个鸡蛋问题:

CA 证书被吊销(在 CRL 中列出),但 CRL 是用吊销的密钥签名的,因此我们无法信任此 CRL 并获得有关根证书是否被吊销的明确答案。这个问题通常通过不使用 RFC5280 技术检查根 CA 撤销来解决。例如,在 Microsoft 的证书链接引擎默认配置中,根本不会检查根 CA 证书是否被吊销。

此类情况(根 CA 吊销)的处理方式不同,使用 OOB 流程,通过维护明确受信任的锚点(根证书)列表并从列表中删除错误的 CA 证书。

“这取决于”。

最安全的答案是“是的,它撤销了子树”,因为一旦“B”证书被撤销,就没有理由信任它声称已颁发的任何证书(或它已签署的任何 CRL,等等)。

但这实际上取决于向链构建器提供的输入(这意味着它在应用程序之间不会保持一致)。

  • 如果在没有检查撤销的情况下建立了链式信任,它会说一切都很好。
  • 如果仅检查最终实体撤销建立链信任,则
    • 如果 CA 发布了最终 CRL 撤销所有内容,那么它会说已撤销。
    • 否则它会说一切都很好。
  • 如果建立链信任以检查除根以外的任何地方的撤销,它会说已撤销。
  • 如果建立链信任来检查整个链的撤销(这有点多余,因为“撤销”根的最简单方法是将其从信任列表中取出),它会说撤销。

.NET 的X509Chain类默认检查除根之外的所有内容的撤销。Win32 CertGetCertificateChain默认为无撤销(撤销类型必须通过dwFlags参数指定)。其他库可能有不同的默认值,应用程序可以通过多种方式配置它们。