术语表

交叉签名 (Cross-Signing)

最后核实

定义

交叉签名是指由一个已被广泛信任的 CA 为另一个 CA 的现有密钥签发证书,使后者签发的证书也能链到老设备信任的根。

交叉签名是为同一个 CA 名称和公钥再签发一张证书,签名者换成另一个早已被客户端信任的 CA。这样,这个 CA 签发的证书就有两条可选路径:一条到它自己的 根证书,另一条经过交叉证书到更老的根。客户端会沿着能落到自己信任库里的那条 证书链 完成验证。

为什么重要

新根证书要进入所有设备的信任库往往需要数年,很多老设备甚至永远不会更新,交叉签名让新 CA 一开始就能兼容这些设备。最著名的例子是 Let's Encrypt:它的 ISRG Root X1 曾由 IdenTrust 的 DST Root CA X3 交叉签名。DST Root CA X3 于 2021-09-30 过期,Let's Encrypt 默认链在 2024-02-08 停止使用交叉签名,交叉证书本身也在 2024-09-30 过期。每一步都让一批过时的客户端出错,说明交叉签名只是过渡手段,而不是长久之计。

例子

2024 年以前,一张 Let's Encrypt 证书可能走的两条路径:

路径 A:example.com -> 中间证书 -> ISRG Root X1(自签名,新设备信任)
路径 B:example.com -> 中间证书 -> ISRG Root X1(交叉签名)-> DST Root CA X3

两条路径的前两环完全相同,只有末端不同。

常见误区

  • 交叉证书用的是另一把密钥。 它与原 CA 证书的主体名称和公钥完全相同,所以两条路径都能验证通过。
  • 交叉签名说明有两家 CA 验证了我的域名。 只有签发 CA 做了域名验证,交叉签名方担保的是 CA 本身,而不是你的网站。
  • 老根过期只影响老设备。 DST Root CA X3 过期时,一些基于 OpenSSL 1.0.2 的客户端即使系统已更新也会失败,因为它们停在了过期路径上,没有尝试另一条有效路径。

延伸阅读