证书没有过期且覆盖当前域名,并不等于所有客户端都能建立信任。中间证书缺失、部署了错误链或不同入口使用不同证书,都可能导致证书链不受信任。
先把三个判断拆开
SSL 检查至少包含 validNow、domainMatches 和 authorized 三个不同判断。validNow 只看当前时间是否落在证书有效期内,domainMatches 看 CN/SAN 是否覆盖访问域名,authorized 则看 TLS 客户端能否验证信任链。
三个结果中任何一个失败,都可能让浏览器或 API 客户端拒绝连接,但修复方向不同。不要只看到有效期正常就关闭证书告警。
- 有效期:证书是否在时间范围内
- 域名:证书是否覆盖访问名称
- 信任链:客户端能否验证签发链
- 入口:CDN、负载均衡和源站可能不同
记录授权错误和证书链证据
复查时保留 hostname、issuer、validTo、authorizationError、chain 长度和检测时间。授权错误比“证书不可信”更有排查价值,可能指向 unable to verify、链不完整或服务端返回了错误中间证书。
如果根域和 www、IPv4 和 IPv6 或不同 CDN 节点结果不同,应分别记录入口。单次检测只能代表本次握手看到的链,不能自动覆盖所有节点。
- 复制 authorizationError
- 记录证书 issuer 和有效期
- 记录 chain 层数及每级颁发者
- 区分访问入口和解析地址
按部署层级修复证书链
常见修复是把服务器配置从仅站点证书改为包含正确中间证书的完整链文件,并确认私钥与站点证书匹配。使用 CDN 或负载均衡时,还要在实际终止 TLS 的那一层更新证书,不能只更新源站。
不要把任意下载的中间证书拼到链中。应从签发机构取得与当前证书对应的链,并核对证书主体、颁发者和环境配置。
- 确认 TLS 终止位置
- 部署与当前证书匹配的完整链
- 检查根域和 www 入口
- 避免混用旧证书和旧中间证书
用多客户端和单项工具验证
部署后先用 SSL 证书检测确认 authorized、domainMatches 和 chain,再用 HTTP Headers 检查 HTTPS 是否能返回响应。随后至少用浏览器和实际业务客户端测试,因为不同客户端的信任库和错误处理可能不同。
验证通过后保留修复前后的 authorizationError、chain 长度和检测时间。证书续期或 CDN 切换后,应重复检查所有公开入口。
- 重新检查 authorized
- 确认域名匹配和链层级
- 检查 HTTPS HTTP 响应
- 用实际浏览器/API 客户端复测
立即处理
使用相关工具
常见问题
关于这个问题
证书未过期为什么浏览器仍提示不安全?
可能是域名不匹配、证书链不完整、混合内容、客户端时间错误或不同入口部署了不同证书。
更新源站证书后 CDN 仍报错怎么办?
先确认 CDN 是否在终止 TLS,以及它是否需要单独上传证书和完整中间链;用户看到的是实际终止 TLS 的入口。
