首页/安全/加密与证书速查/中间证书新旧混用排查

中间证书新旧混用排查

同一域名的不同节点部署了不同批次中间证书时,会出现部分客户端正常、部分报错的随机现象。统一 fullchain 版本并逐出口抓取实际链进行指纹比对,是定位的关键。

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

中间证书混用是怎么回事

证书续期或 CA 更换中间证书时,如果只更新了一部分节点(CDN 边缘、回源、负载均衡、内网网关),就会同时存在新旧两版链。客户端拿到哪一版取决于 DNS 解析与调度,于是出现「部分用户正常、部分用户报错」的随机现象,重启浏览器或换网络又好了,很难复现。定位办法是逐个出口抓取实际发送的链,按证书指纹比对,找出仍在发旧链的节点。

基本信息

典型现象同一域名在不同网络、不同设备上表现不一致
核对对象CDN 边缘、回源节点、负载均衡、网关、内网反代,一个都不能少
比对手段逐个出口抓链后计算指纹,或列出每张证书的 subject 与 issuer
常见诱因续期时只换了一部分节点的 fullchain 文件
判定标准所有出口发送的链指纹应完全一致
收尾动作建立证书文件的统一分发与校验流程

典型使用场景

  • 随机报错排查:客户端时好时坏,先怀疑链不一致而不是网络抖动。
  • CA 更换切换:新旧中间证书并存期,核查是否所有节点都已切换。
  • 续期后验证:换完证书按出口清单逐个比对链指纹,作为发布检查项。
  • 多 CDN 并存:同一域名走多家 CDN 时,各家链版本可能不同步。
  • 回滚准备:发现新链有问题时,能明确哪些节点需要回退到什么版本。

多出口链指纹比对

多出口链指纹比对
for ip in 203.0.113.10 203.0.113.11; do
  echo -n "$ip "
  echo | openssl s_client -connect $ip:443 -servername example.com -showcerts 2>/dev/null \
    | openssl crl2pkcs7 -nocrl -certfile /dev/stdin | openssl pkcs7 -print_certs -noout | md5sum
done
# 指纹相同说明链一致;不同则继续看是哪张证书的 issuer 变了
# 逐个列出证书主体与签发者
# openssl s_client -connect example.com:443 -showcerts </dev/null 2>/dev/null | grep -E '^ *i:|^ *s:' | head

现象与根因对照

现象可能根因核对方法
部分客户端报链不完整某些节点只发叶证书或旧中间证书逐出口抓链,比对证书条数
换网络后恢复正常不同出口发不同链,调度随机命中多网络环境重复抓取比对指纹
同一节点时好时坏节点本地证书文件有多份,被不同进程加载检查该节点上所有相关配置与进程
安卓正常、iOS 报错客户端信任库差异叠加链不一致按客户端类型与出口交叉比对
更换中间证书要有灰度与回滚安排:先在一个出口验证,再逐批切换,并保留旧链文件一段时间,避免全量切换后才发现兼容问题。

易错点

  • 只看 CDN 边缘不看回源:回源链不一致时,内部调用与直连场景仍然报错。
  • 更换中间证书没有灰度与回滚:出问题时只能全量回退,恢复时间长。
  • 用浏览器单点测试下结论:浏览器有缓存与多路径重试,容易掩盖不一致。
  • 只比叶证书不比对中间证书:叶证书没变、中间证书换了,同样会造成差异。

数据来源与参考

  • OpenSSL 官方文档(s_client / crl2pkcs7 / pkcs7)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌