多 CDN 场景的证书同步
同一域名接入多家 CDN,或同一家 CDN 的边缘节点分批更新时,证书会在多个平台上各自维护:CDN 控制台上传的托管证书、源站上的证书、回源链路上的证书,是三套彼此独立的生命周期。只要有一处没跟上轮换,就会出现「换个网络能打开、换个网络报证书错误」的随机故障。可用的验证手段是按出口 IP 逐个探测,比对证书的签发者与有效期;治理手段是把所有平台的证书清单纳入同一份到期监控。
基本信息
| 同步对象 | CDN 平台托管证书、源站证书、回源链路证书各自独立 |
|---|---|
| 验证方法 | 指定出口 IP 做 s_client 探测,比对 issuer 与 notAfter |
| 常见故障 | 只续期源站证书,忽略 CDN 平台上的旧证书 |
| 灰度要求 | 先在部分节点替换并验证,再全量同步 |
| 监控要求 | 各平台到期时间集中监控,而不是各自提醒 |
| 证据留存 | 记录出口 IP、证书指纹与探测时间,便于事后核对 |
典型使用场景
- 随机报错排查:不同网络表现不一致时,先按出口逐点探测证书。
- 证书轮换执行:换证时按平台清单逐项替换并验证,避免漏项。
- 多 CDN 评估:对比各节点证书版本是否与源站一致。
- 到期巡检:定期跑一遍全部出口,确认没有节点在用即将过期的证书。
- 故障复盘:用探测记录还原故障期间各节点的实际证书状态。
逐出口探测
逐出口探测
for ip in 198.51.100.1 198.51.100.2 203.0.113.7; do
echo "== $ip"
echo | openssl s_client -connect $ip:443 -servername www.example.com 2>/dev/null | openssl x509 -noout -issuer -enddate -serial
done
# 记录探测时间,配合各平台操作日志定位是哪一次变更导致的差异
# 也可用 curl --resolve 从本机指定出口复验业务表现不一致的表现与归因
| 表现 | 可能原因 | 核对方法 |
|---|---|---|
| 部分网络报证书无效 | 个别节点仍用旧证书 | 按出口探测比对各节点证书 |
| 某地区全部报错 | 该区域节点证书未更新 | 按地域收集出口 IP 探测 |
| 有效期不一致 | 多平台轮换时间不同步 | 汇总各节点 notAfter 排序 |
| issuer 不一致 | 不同平台接了不同 CA 或中间证书 | 比对 issuer 与链内容 |
| 仅回源调用失败 | 源站证书未同步更新 | 在内网直接探测源站入口 |
更换证书时先在部分节点灰度验证,确认客户端兼容性与业务无异常后再全量同步;一次性替换所有节点会把小问题放大成全站中断。