SSL证书链不完整会导致什么?TLS握手证书链配置与排查指南

更新时间:2026-01-20 来源:TopSSL技术团队

SSL证书链不完整会导致什么?

SSL 证书链不完整,是 HTTPS 连接出现证书信任错误的常见原因之一。客户端访问 HTTPS 网站时,需要验证服务器证书能否建立到受信任根 CA 的完整路径;服务器没有正确发送必要中间证书时,客户端无法完成路径验证,出现 NET::ERR_CERT_AUTHORITY_INVALID、unable to get local issuer certificate 等错误。需要明确的是,"完整证书链"不等于"服务器必须把根证书也发给客户端":服务器负责发送服务器证书和必要的中间 CA 证书,受信任的根证书一般已存在于客户端操作系统、浏览器或应用的信任库中。本文解析证书链的结构与配置(Nginx 顺序要求、Apache fullchain 方式)、设备与 Java TrustStore 差异、TLS 1.3 机制,以及从公网终端检查证书链的排查方法。

浏览器报"证书不受信任",最常见的原因不是证书本身坏了,而是服务器没把中间证书发全。证书链的结构、配置顺序和排查方法,是 HTTPS 部署里值得单独理清楚的一环。证书的信任路径是怎么构建的,可以参考证书的信任路径构建。


为什么证书需要证书链

SSL/TLS 证书一般不是由根 CA 直接签发给网站的,更常见的结构是:根 CA 签发中间 CA,中间 CA 签发网站证书。这样避免根 CA 私钥直接参与大量终端证书签发,也能通过中间 CA 对不同证书业务做隔离和管理。

浏览器拿到服务器返回的证书后,按证书中的 Issuer、签名和本地信任库构建路径。路径能连到客户端信任的根 CA,验证继续;服务器没提供客户端需要的中间证书时,路径构建失败。


服务器该发哪些证书

服务器一般不该把根证书加入发送的证书链。正确的服务器证书文件是"网站服务器证书 + 中间 CA 证书",而不是"服务器证书 + 中间证书 + 根证书"——根证书客户端已经预置,重复发送反而可能造成混淆。

证书链问题的表现不完全相同:NET::ERR_CERT_AUTHORITY_INVALID、Verify return code 20(unable to get local issuer certificate)、21(unable to verify the first certificate)都可能出现,但不能仅凭错误代码断定服务器一定缺中间证书——也可能是客户端本地信任库缺 CA,或当前验证环境无法建立路径。

同一个网站出现"部分设备正常、部分设备报错"时,不一定是服务器配置问题:不同系统用不同根证书库,不同应用有自己的 TrustStore,部分 Java 应用用独立的 JKS/PKCS12,企业应用可能通过 Network Security Configuration 指定信任锚。服务器端应主动提供规范、完整的中间证书链,不要依赖客户端自己补全。Java 应用尤其容易暴露这类问题,TrustStore 缺 CA 或中间证书没返回时,报 PKIX path building failed,网站浏览器访问正常不代表所有 Java API 客户端正常。证书链错误的处理思路可以参考证书链错误的处理。


Nginx 与 Apache 的证书链配置

Nginx 官方文档要求:ssl_certificate 文件中如果包含中间证书,按"服务器证书在前、中间证书在后"的顺序排列。fullchain.pem 的内容顺序错了(中间证书在前)会导致链验证异常:

ssl_certificate /etc/nginx/ssl/example-fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/example.key;

Apache 2.4.8 起,SSLCertificateFile 支持在同一 PEM 文件中包含中间 CA 证书,过去单独指定证书链的 SSLCertificateChainFile 已标记为 deprecated,现代 Apache 优先用完整 PEM 文件。证书链文件的组织与配置可以参考证书链文件的配置。


TLS 1.3 的证书链机制

TLS 1.3 没有取消服务器发送证书链:服务器仍通过 Certificate 消息发送证书链,客户端继续做路径验证。TLS 1.3 的 certificate_authorities 扩展与证书选择、客户端证书认证有关,不能替代服务器发送完整证书链。升级到 TLS 1.3 不会自动修复证书链缺失问题。


怎么检查与解决

检查服务器实际发送的链:

openssl s_client -connect example.com:443 -servername example.com -showcerts

-servername 指定 SNI 域名,一个 IP 多个 HTTPS 站点时防止检查到默认虚拟主机的证书;-showcerts 显示实际发送的证书。重点看 Verify return code,0 (ok) 表示当前 OpenSSL 信任环境验证成功,20/21 再结合具体错误判断。

顺序判断:服务器发送的证书一般按"Leaf → Intermediate 1 → Intermediate 2"排列,第一张是访问域名对应的服务器证书,后面依次是签发它的中间证书。配合 openssl x509 -in cert.pem -noout -subject -issuer 查看每张的 Subject 和 Issuer,确认上下级关系。

本地文件正确但公网仍报错的场景很常见:fullchain.pem 已更新但 Nginx 没 reload 继续用旧证书,或源站是新证书、CDN 还是旧证书。检查证书链一定要看公网 TLS 终端实际返回了什么,而不是只看服务器磁盘文件,公网侧的核对可以用证书链完整性在线检测。

确认服务器缺中间证书后的处理:Nginx 把服务器证书和中间 CA 按顺序合并到 fullchain.pem,配置后 nginx -t 确认无误再 systemctl reload nginx;Apache 用 SSLCertificateFile 加载包含中间证书的完整 PEM;Java/Tomcat 使用 JKS、PKCS12 TrustStore 时,检查对应 CA 是否已被信任。

生产环境建议用自动化减少这类问题:证书签发 → 自动生成 fullchain → 自动部署 → reload → 公网 TLS 探测 → 检查证书链 → 异常告警。多服务器、CDN、WAF 和负载均衡环境,监控各 TLS 终端实际返回的证书、证书链、到期时间、SAN、Issuer 和 TLS 版本,避免"文件已更新但公网节点仍返回旧链"。


常见问题解答

SSL 证书链必须包含根证书吗?

一般不需要。服务器通常发送网站证书和必要的中间 CA 证书,客户端通过本地信任库提供受信任的根证书。

Nginx 的证书链应该怎么排列?

服务器证书放在最前面,中间 CA 证书依次放在后面。Nginx 官方文档明确要求 ssl_certificate 文件采用这一顺序。

证书链不完整一定会导致所有浏览器报错吗?

不一定。不同操作系统、浏览器和应用可能使用不同的证书路径构建和信任库,可能出现部分设备正常、部分设备报错。但服务器不应依赖客户端自动补全,应主动提供正确的中间证书链。

Apache 还需要配置 SSLCertificateChainFile 吗?

现代 Apache 2.4.8 及以后一般不需要。可以把服务器证书和中间 CA 证书合并到 SSLCertificateFile 指定的 PEM 文件中,SSLCertificateChainFile 已过时。

为什么服务器证书已更新,证书链检查仍然失败?

可能是 Web 服务没有 reload,或 CDN、WAF、负载均衡等其他 TLS 终端没有同步更新。用 OpenSSL 从公网检查实际返回的证书链。


SSL 证书链的完整性直接影响客户端能否建立可信的证书路径。服务器应发送服务器证书和必要的中间 CA 证书,不需要重复发送客户端已信任的根证书;Nginx 要求服务器证书在前、中间证书在后,现代 Apache 2.4 用 SSLCertificateFile 加载包含中间证书的完整 PEM 文件。TLS 1.3 没有改变发送证书链和验证路径的机制。生产环境应从公网实际 TLS 终端检查证书链,而不是只看服务器本地文件。

立即探索,帮您快速寻找适合您的SSL数字证书 申请SSL证书
免费SSL证书 - SSL证书申请与HTTPS安全服务平台 | TopSSL
提供免费与付费SSL证书申请
关注 TopSSL 公众号, RSS订阅SSL资讯与技术支持

TopSSL是一站式SSL证书服务平台,提供免费SSL证书申请、商业SSL证书服务及HTTPS安全解决方案,支持DV、OV、EV、通配符和国密SSL证书服务。2004-2026 © 北京传诚信  版权所有 |  北京市朝阳区鹏景阁大厦16层

技术协助:wo@topssl.cn 企业咨询:vip@topssl.cn