SSL 工具集 / sslops.cn

如何解决网站 SSL 证书链不完整

浏览器提示"证书无效",或用在线工具检测站点时提示 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 / 负载均衡场景注意检查边缘节点是否也更新了证书配置。

相关工具