首页/安全/加密与证书速查/交叉签名与新旧根过渡

交叉签名与新旧根过渡

新根 CA 刚上线时未必进入所有客户端信任库,常见做法是用仍被信任的旧根为同一公钥再签一份中间证书(交叉签名),让新旧客户端都能完成校验。

加密与证书速查安全更新于 2026-10-13

交叉签名是什么

新根 CA 刚上线时未必进入所有客户端与操作系统的信任库,常见过渡做法是用仍被广泛信任的旧根,为同一个密钥再签一份中间证书,这就是交叉签名。于是同一张中间证书存在两条验证路径:一条经旧根,一条经新根,新旧客户端各自走能走通的那条。等新根普及到目标客户端后,再逐步停用交叉签名路径。

基本信息

原理同一中间证书公钥被两个不同根分别签名,形成两条验证路径
使用方式链中同时携带两条路径,客户端择一验证
过渡目标新根普及后停止使用交叉签名
辨认特征同一主体出现签发者不同的多张中间证书,或被签的密钥 SPKI 相同
验证依据RFC 5280 的多路径构建规则

典型使用场景

  • 新根上线过渡:公共 CA 更换根证书后,让老客户端继续可用。
  • 收购与合并:合并后的 CA 体系需要一个过渡期统一信任链。
  • 排障定位:客户端报链不完整时,确认是否走了未被信任的那条路径。
  • 证书链优化:携带两条路径会让握手字节数上升,需要按客户端分布取舍。
  • 私有 PKI 例外判断:自建体系一般不需要交叉签名,不要照搬公共 CA 做法。

辨认交叉签名

辨认交叉签名
openssl s_client -connect example.com:443 -servername example.com -showcerts </dev/null 2>&1 | grep -E 's:|i:' | head -10
# 逐张导出链上证书,比对同一主体的签发者是否不同
# openssl s_client -connect example.com:443 -showcerts </dev/null 2>&1 | awk '/BEGIN CERT/{n++} n' | csplit - '/END CERTIFICATE/' '{*}' >/dev/null
# 检查被签证书的公钥指纹是否一致:一致即同一密钥被两条路径覆盖

路径与客户端匹配

客户端情况可用路径处理
信任库含新根新根路径正常校验,无需处理
信任库只含旧根旧根路径依赖交叉签名维持可用
两条路径都不可用无确认链是否完整携带、顺序是否正确
客户端不支持多链取首条有效路径确认链顺序把最兼容的路径放前面
交叉签名更常出现在公共 CA 更替与并购场景,自建 PKI 很少用到;内网场景更实际的替代做法是把根证书提前下发到终端信任库。

易错点

  • 把交叉签名中间证书当普通中间证书长期使用:退出计划缺失,旧根到期时集中爆发中断。
  • 链中携带过多路径:握手体积上升,移动网络下反而拖慢首字节时间。
  • 以为交叉签名能修复信任库缺失:客户端根本不信任任一签发根时,两条路径都走不通。
  • 排障时只看第一张中间证书:没看到另一条路径的存在,误判为链不完整。

数据来源与参考

  • RFC 5280 §6(多条认证路径)
  • CA/Browser Forum 根迁移实践
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌