核心是确认服务器实际发送的证书是否符合“终端证书→中间证书”顺序且不含根证书,用openssl s_client -connect domain:443 -showcerts查看begin certificate块:第一块须为域名证书,后续为匹配的中间证书,不可含根证书或顺序颠倒。

排查 Nginx HTTPS 证书链配置顺序错误,核心是确认服务器实际发送的证书是否符合“终端证书 → 中间证书”这一严格顺序,且不含根证书。安卓、curl、现代浏览器等客户端对顺序敏感,错位或缺失都会触发“证书不受信任”警告。
用 OpenSSL 模拟客户端视角验证真实链
运行命令直接查看 Nginx 当前对外提供的证书序列:
openssl s_client -connect your-domain.com:443 -showcerts- 观察输出中多个
BEGIN CERTIFICATE块的排列:第一块必须是你域名的证书(Subject 含你的域名);第二块起应为中间证书,其 Issuer 要与上一块的 Subject 匹配;最后一块不能是根证书(如 ISRG Root X1) - 若只看到一块证书,说明 Nginx 没有加载完整链;若中间证书在前、域名证书在后,就是典型顺序错误
检查 fullchain.pem 文件内容与拼接逻辑
Nginx 的 ssl_certificate 必须指向一个按序拼接的 PEM 文件,不是单个 cert.pem:
Nginx是一款高性能的开源软件,由俄罗斯开发者Igor Sysoev于2004年创建。它最初设计为高效的HTTP Web服务器,现已成为最受欢迎的Web服务器之一。Nginx以事件驱动、非阻塞I/O架构著称,能以极低内存占用处理数万并发连接,特别适合高流量场景。它同时担任反向代理、负载均衡器、HTTP缓存、TCP/UDP代理等多重角色,常用于静态文件服务、SSL终止、请求转发、API网关和微服务
- 打开该文件,确认第一段是你的域名证书(
Subject=CN=your-domain.com) - 第二段起应为中间证书(如 Let’s Encrypt 的 R3),不能是 root CA
- 正确拼接方式:
cat cert.pem intermediate.pem > fullchain.pem(注意顺序,不可颠倒) - 常见错误:把
ca-bundle.crt或root.crt也加进去,或误将私钥混入
核对 Nginx 配置与文件权限
即使链文件正确,配置或权限问题也会导致 Nginx 读取失败或降级使用错误内容:
- 确认配置中
ssl_certificate指向的是fullchain.pem,而非cert.pem或bundle.crt - 私钥仍用原始
privkey.pem,且权限为600;证书链文件权限建议644 - SELinux 或 AppArmor 可能拦截读取,临时禁用测试可快速排除(如
setenforce 0)
清除缓存并交叉验证结果
旧的握手失败可能被客户端缓存,干扰判断:
- 重启 Nginx 后,再次执行
openssl s_client确认输出已更新 - 用安卓手机 Chrome 无痕模式访问,或使用 SSL Labs 检测 “Chain issues” 是否显示 OK
- 避免仅依赖 curl 默认行为——加
-k会跳过验证,失去排查意义;应使用curl -v https://your-domain.com观察 TLS 握手日志










