浏览器提示"证书无效",或用在线工具检测站点时提示 Chain issues: Incomplete(证书链不完整),是 HTTPS 部署中最常见的问题之一:证书本身没有问题,但服务器没有把中间证书一并下发,导致部分客户端(尤其是手机浏览器、Java/老系统客户端)无法验证到受信任的根证书。
常见原因
- 中间证书缺失:部署时只配置了域名证书(终端证书),没有配置中间证书(Intermediate CA),服务器下发的证书链不完整。
- 配置错误:服务器上虽然存在中间证书,但配置方式有误(如配置在错误的指令或文件里),或者证书链顺序不正确。
如何检测
用 SSL/TLS 检测工具 输入域名即可查看服务器实际下发的完整证书链:正常的站点会展示"终端证书 → 中间证书 → 根证书"的完整链条;如果只有一张证书,就是链不完整。证书链不完整的站点在评级中最高只能到 B 档。
也可以直接用证书解析与补链工具粘贴证书内容,查看链中缺少哪一级,并获取补全后的完整链文件。
解决方案(按服务器类型)
Nginx
Nginx 只有一个 ssl_certificate 指令,要求证书文件里按顺序包含"终端证书 + 中间证书"。证书商一般会直接提供合并好的文件(如 domain_com_integrated.crt 或 domain_com_bundle.crt),直接使用即可;如果拿到的是分开的文件,手动合并:
cat domain_com.crt domain_com.ca-bundle > domain_com_full.crt
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/ssl/domain_com_full.crt; # 终端证书+中间证书
ssl_certificate_key /etc/nginx/ssl/domain_com.key;
}
注意:不要只填终端证书文件,也不要把顺序拼反(终端证书必须在最前)。
Apache
Apache(CentOS)传统上用单独的指令指定证书链:
SSLCertificateFile /etc/httpd/ssl/domain_com.crt
SSLCertificateKeyFile /etc/httpd/ssl/domain_com.key
SSLCertificateChainFile /etc/httpd/ssl/domain_com.ca-bundle # 证书链
Apache 2.4.8 起 SSLCertificateChainFile 已废弃,推荐合并写法:
cat domain_com.crt domain_com.ca-bundle > domain_com_full.crt
SSLCertificateFile /etc/httpd/ssl/domain_com_full.crt
SSLCertificateKeyFile /etc/httpd/ssl/domain_com.key
Ubuntu/Debian 的 Apache 配置位于 /etc/apache2/sites-available/default-ssl.conf,写法相同。
IIS
在 IIS 的"证书导入向导"里直接导入 PFX 可能导致证书链不完整。推荐的做法是:按 Win + R 输入 certlm.msc,直接打开本地计算机的证书管理控制台,把 PFX 导入到"个人 → 证书"(导入时中间证书和根证书会自动进入对应存储),随后再在 IIS 站点绑定中选择该证书。此方法能有效避免证书链缺失。
第三方平台(面板 / CDN / 负载均衡)
在第三方平台上传证书时应该按照平台要求上传:
- 上传界面只要求"证书 + 私钥"两个文件时,上传合并后的完整链文件(Nginx 格式的
_integrated/_bundle证书)和 key 文件,不要只贴终端证书; - 上传界面要求"证书、私钥、证书链"三项时,分别上传:
domain_com.crt证书文件domain_com.key私钥文件domain_com.ca-bundle证书链文件
修改后验证
完成配置后重启(或重载)Web 服务,重新用检测工具扫描一次,确认证书链展示完整、评级恢复正常。CDN / 负载均衡场景注意检查边缘节点是否也更新了证书配置。