证书链文件顺序错误会导致浏览器提示“证书无效”或“net::err_cert_authority_invalid”,因验证需从域名证书逐级向上追溯至根证书;正确顺序为:域名证书→中间证书(由高到低),根证书不可包含。

证书链文件顺序写错,最直接的表现是:浏览器或部分客户端(尤其是移动端)提示“证书无效”“NET::ERR_CERT_AUTHORITY_INVALID”或“证书链不完整”,而桌面 Chrome 可能仍显示正常——这恰恰说明中间证书缺失或顺序颠倒。
为什么顺序重要
浏览器验证 HTTPS 时,会从服务器返回的第一张证书(叶子证书)开始,逐级向上用上一级证书的公钥验证签名,直到抵达系统信任的根证书。这个过程依赖自上而下、可追溯的链式结构。如果文件里把中间证书放在前面、域名证书放在后面,或者漏掉某一级中间证书,浏览器就无法完成校验路径。
确认当前顺序是否错误
用这条命令快速检查:
openssl s_client -connect your-domain.com:443 -servername your-domain.com -showcerts 2>/dev/null | grep "s:"
观察输出中证书出现的顺序:
- 第一行应为 s:/CN=your-domain.com(你的域名证书)
- 紧接着应是 s:/CN=Some Intermediate CA(中间证书)
- 最后可能有根证书(但通常不需发送,浏览器自有)
如果只看到一行 CN=your-domain.com,或中间证书出现在域名证书之前,就是顺序错了。
正确拼接证书链文件
Nginx 要求证书文件(如 fullchain.pem)按以下严格顺序拼接:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 第一部分:你的域名证书(leaf cert,通常叫
your-domain.crt或domain.pem) - 第二部分:全部中间证书(intermediate certs),按签发层级从高到低排列(即先放离根近的,再放离叶子近的)
- 根证书(root cert)不要放入——Nginx 不需要,且加入反而可能干扰校验
操作示例(Linux 终端):
cat domain.crt intermediate1.crt intermediate2.crt > fullchain.pem
然后在 Nginx 配置中指向这个新文件:
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
验证修复是否生效
改完后执行三步:
- nginx -t 确保语法正确
- nginx -s reload 重载配置
- 再运行 openssl s_client... 命令,确认输出中至少有两张证书,且第一张是你的域名
还可访问 SSL Checker 输入域名,它会明确告诉你“Certificate chain is incomplete”还是“OK”。










