宝塔拨测博客拨测技术博客
宝塔拨测

网站提示证书链不完整怎么办?PEM 证书拼接与根证书补全

给网站配好 HTTPS 后,浏览器却提示「证书链不完整」或「不受信任」,问题几乎都出在证书文件本身:服务器下发的 PEM 证书没拼全,漏了根证书。本文讲清证书链是什么、为什么会不完整,以及在宝塔面板里怎么正确拼接补全。

证书链是什么:从站点证书一路追到受信任的根

浏览器验证 HTTPS 时,不是只看你那张站点证书,而是从站点证书出发,逐级往上追到浏览器内置的「受信任根证书」,这条自上而下的信任路径就是证书链。只有当整条链每一环都能对上、末端落到浏览器信任的根上,才会显示为安全连接。

所以「证书链不完整」的本质是:服务器只给了站点证书,没把中间的根证书一起下发,浏览器凑不齐这条链,只能报「不受信任」。官方文档对这类情况的说法很直接(见网站 SSL 证书部署):

如果浏览器提示证书链不完整,请检查是否正确拼接 PEM 证书。

PEM 证书 = 域名证书 + 根证书,少一段都不行

多数情况下,你拿到的证书文件里除了私钥,还有两份证书内容:域名证书(你的站点证书)和根证书(root_bundle)。PEM 格式证书就是这两段拼在一起的结果:

PEM 格式证书 = 域名证书.crt + 根证书(root_bundle).crt

只填域名证书、漏掉根证书,浏览器验证时追不到信任根,就会提示证书链不完整。因此补全证书链,核心就是把「域名证书 + 根证书」按正确方式拼成一个完整的 PEM 交给服务器。

不同 Web 环境怎么填:Nginx 两文件、Apache 三文件

宝塔面板里部署证书,根据网站使用的 Web 环境,证书目录的文件个数不同(见网站 SSL 证书部署)。

Nginx 环境:两个文件。 证书目录里通常是 .key 后缀的私钥文件和 .crt(也可能是 .pem)后缀的证书文件,把私钥和证书分别填入面板对应位置即可:

Nginx 环境证书目录只有私钥和证书两个文件

Apache 环境:三个文件。 除了私钥,还有「域名证书」和「root 根证书」两份,需要先把域名证书和根证书合并成一个 PEM 再填入面板:

Apache 环境证书目录有三个文件:私钥、域名证书、根证书

官方文档特别提醒 Apache 环境这个坑:若不合并、只填域名证书,手机访问就会报「缺失证书链」「不安全」等问题;而且合并时顺序不能反——域名证书放上面、root 根证书放下面,顺序不正确会导致 Apache 无法正常启动。

证书怎么合并:域名证书在上、根证书在下

合并证书的做法很简单:用文本编辑器把两份证书内容按顺序拼在一起,完整复制(见网站 SSL 证书部署):

证书合并:域名证书在上、root 根证书在下,完整拼接

  1. 打开域名证书文件,把整段内容(含 -----BEGIN CERTIFICATE----- 和 -----END CERTIFICATE-----)复制到最前面;
  2. 紧接着粘贴 root 根证书的整段内容;
  3. 把合并后的完整内容作为一个 PEM 填入面板证书位置,保存即可。

保存后浏览器就能顺着「站点证书 → 根证书」完整验证,证书链不完整的提示消失。

补全后还要排查的两点

证书拼全了,如果 HTTPS 还是异常,官方文档还提了两个常见场景(见网站 SSL 证书部署):

  • 443 端口未放行:开启 SSL 后无法用 HTTPS 访问,先检查云安全组是否正确放行了 443 端口。
  • 未指定 SSL 默认站点:当服务器上有多个站点、且没有指定哪个是 SSL 默认站点时,未开启 SSL 的站点用 HTTPS 访问,会被直接转到已开启 SSL 的那个站点上,看起来像「证书不对」。

这两个都不是证书链本身的问题,但排查「证书提示异常」时要一并确认,避免改完证书链还发现访问异常。

想确认线上站点各节点看到的证书是否正常、还剩多少天过期,可以用宝塔拨测的 SSL 证书检测入口,一次看全国多节点的证书状态,而不是只看本机浏览器。

常见问题

证书链不完整是什么意思?

浏览器验证 HTTPS 证书时,会从站点证书逐级往上追到受信任的根证书,这条链条就是「证书链」。如果服务器只下发站点证书、没把中间的根证书一起发给浏览器,浏览器凑不齐这条链,就会提示「证书链不完整」或「不受信任」。

为什么我部署证书后会提示证书链不完整?

最常见的原因是 PEM 证书没有拼全:只填了域名证书、漏掉了根证书(root_bundle)。PEM 格式证书应该是「域名证书 + 根证书」拼接在一起,少一段就会导致手机或浏览器报缺失证书链、提示不安全。

Nginx 和 Apache 环境补证书链有什么区别?

Nginx 环境证书目录通常只有两个文件:私钥(.key)和证书(.crt 或 .pem),直接分别填入面板即可。Apache 环境通常有三个文件:私钥、域名证书、root 根证书,需要把域名证书和根证书合并成一个 PEM 再填入,否则手机访问会报缺失证书链。

证书合并时顺序有要求吗?

有。合并时域名证书放上面、root 根证书放下面,两段内容完整拼接。如果顺序放反,Apache 环境可能导致服务无法正常启动,所以要按「域名证书在上、根证书在下」的顺序合并。

补全证书链后还需要注意什么?

确认 HTTPS 无法访问时先检查安全组是否放行了 443 端口;另外在未指定 SSL 默认站点时,未开启 SSL 的站点用 HTTPS 访问会直接落到已开启 SSL 的站点,这也是排查「证书提示异常」时要考虑的场景。