TLS 证书链不完整排查
现象
- 浏览器或客户端提示证书不受信任。
curl 提示 unable to get local issuer certificate。
- 部分客户端正常,部分客户端失败。
- 移动端或老系统访问 HTTPS 失败。
快速判断
echo | openssl s_client -servername example.com -connect example.com:443 -showcerts 2>/dev/null
排查命令
# 查看线上证书链
echo | openssl s_client -servername example.com -connect example.com:443 -showcerts 2>/dev/null | openssl x509 -noout -subject -issuer
# 查看本地证书
openssl x509 -in /path/to/cert.pem -noout -subject -issuer -dates
# 查看 Nginx 证书配置
nginx -T | grep -E "ssl_certificate|ssl_certificate_key"
常见原因
- 服务端只配置了站点证书,没有配置中间证书。
- 证书文件顺序错误。
- 使用了错误的 CA bundle。
- 负载均衡、Ingress、网关仍在使用旧证书。
- 客户端信任库过旧。
处理建议
- 使用包含站点证书和中间证书的 fullchain 文件。
- Nginx 通常应将
ssl_certificate 指向 fullchain。
- 更新证书后 reload 服务,并确认线上实际证书链。
- 多层代理环境逐层确认 TLS 终止位置。
高危提醒
- 不要覆盖旧证书文件后直接重启,先备份。
- 不要把私钥提交到 Git 仓库或粘贴到 Issue。
相关专题