← 返回题目列表

HTTPS 证书报错如何排查?常见证书链、域名和过期问题怎么看?

高频 中等 第 14 / 26 题 更新于 2026/07/31
HTTPSTLS证书openssl

简化版

HTTPS 证书报错要按域名、证书链、有效期、信任根、SNI、客户端时间和代理劫持逐项排查。常用工具是浏览器证书详情、openssl s_clientcurl -v。常见问题包括证书过期、域名不匹配、漏配中间证书、SNI 配错、自签证书未被信任。

详细版

排查 HTTPS 证书问题时,先确认访问域名和证书 SAN 是否匹配,再看证书是否过期或未生效。然后检查服务端是否返回完整证书链,客户端是否信任根 CA,负载均衡或 CDN 是否用了正确证书。

常用命令:

openssl s_client -connect example.com:443 -servername example.com -showcerts
curl -v https://example.com/

-servername 很重要,它会带 SNI。没有 SNI 时,多域名服务器可能返回默认证书,导致误判。

完整版教学

一、TLS 证书验证在验证什么

浏览器访问 HTTPS 时,不只是协商加密,还要确认服务器身份。证书验证主要回答:这个证书是不是可信 CA 签发,证书里的域名是不是我要访问的域名,证书是否在有效期内。

trusted CA -> certificate chain valid
hostname matches SAN
now within notBefore/notAfter

任何一项失败,浏览器都应该报警。证书错误不是普通网络慢,而是身份无法确认。

二、域名不匹配怎么判断

现代证书主要看 SAN,也就是 Subject Alternative Name。访问 api.example.com 时,证书必须包含 api.example.com 或匹配的通配符。

valid: *.example.com matches api.example.com
invalid: *.example.com does not match a.b.example.com

通配符只匹配一层子域。很多线上故障来自证书覆盖了 www.example.com,但没有覆盖 api.example.com

三、证书链不完整是什么

服务端通常要返回站点证书和中间证书,客户端本地信任根证书。如果服务端漏发中间证书,有些客户端可以自动补全,有些客户端会验证失败。

site cert -> intermediate CA -> root CA
server should send: site cert + intermediate
client has: root CA

这种问题在浏览器里可能正常,在 Java、老 Android、curl 里失败。排查时要看完整链,而不是只看第一张站点证书。

四、SNI 为什么重要

一台服务器或负载均衡可能托管多个 HTTPS 域名。客户端在 TLS ClientHello 里用 SNI 告诉服务器自己要访问哪个域名,服务器据此选择证书。

same IP:443
SNI=a.example.com -> cert A
SNI=b.example.com -> cert B

如果工具没有带 SNI,服务器可能返回默认证书,导致你以为证书错了。openssl s_client 排查时要加 -servername

五、时间和有效期问题

证书有 notBeforenotAfter。客户端时间错误也会导致证书看起来未生效或已过期。

certificate valid: 2026-01-01 ~ 2026-12-31
client clock: 2025-12-01 -> not yet valid
client clock: 2027-01-01 -> expired

线上服务器、容器和客户端都要同步时间。NTP 异常不仅影响证书,也影响日志、签名和调度。

六、代理和企业根证书

有些公司代理、防病毒软件或抓包工具会安装本地根证书,对 HTTPS 做中间代理。浏览器看到的证书可能不是网站原始证书,而是代理临时签发的证书。

browser -> corporate proxy -> real site
browser sees cert issued by corporate CA

如果只有某台机器报证书异常,要检查本机根证书、代理配置、系统时间和安全软件,而不是只查服务端。

七、常用命令和排查顺序

可以先用 curl -v 看握手和错误,再用 openssl s_client 看证书链。排查顺序建议固定:域名、SNI、有效期、证书链、信任根、代理、本机时间。

排查项工具关注点
域名匹配浏览器/opensslSAN
证书链opensslintermediate
过期openssl/curlnotAfter
SNIopenssl-servername
客户端信任系统证书库root CA

记忆钩子:证书排查先问“证书给谁、谁签的、现在能不能用、客户端信不信”。

八、常见误区与追问

  • 误区:浏览器能打开就代表所有客户端都没问题。 不同客户端证书库和链补全能力不同。
  • 误区:证书链只要有站点证书就够。 服务端通常还要返回中间证书。
  • 误区:openssl 不带 SNI 也能准确验证多域名站点。 多域名 HTTPS 必须带 -servername
  • 追问:证书域名匹配看 CN 还是 SAN? 现代验证主要看 SAN。
  • 追问:为什么只有部分用户报证书错? 可能是客户端时间、根证书、代理、老系统兼容或分地域 CDN 证书不同。
  • 追问:证书刚换后仍报错怎么办? 检查负载均衡/CDN 节点是否全部更新,是否缓存旧证书。
  • 追问:自签证书能不能用? 内网可用,但客户端必须安全分发并信任对应 CA。

九、加强记忆

HTTPS 证书问题不要只盯“过期”。完整排查链路是:访问的域名是否在 SAN 中,SNI 是否拿到了正确证书,证书链是否完整,时间是否在有效期内,客户端是否信任根 CA,链路中是否有代理替换证书。把这些固定成 checklist,排查证书错误就不会乱。