ssl_certificate必须包含完整证书链(域名证书+中间证书),而ssl_trusted_certificate仅供Nginx内部验证(如OCSP或mTLS),不发给客户端,故无法解决浏览器“证书链不完整”警告。
直接用 ssl_trusted_certificate 不能“补全”证书链,它不参与服务器发送给客户端的证书列表,只用于 Nginx 自身验证(比如 OCSP stapling 或 client certificate 验证)。真正让安卓、Chrome 等客户端信任的关键,是 ssl_certificate 文件里必须包含完整的、顺序正确的证书链。
为什么 ssl_trusted_certificate 不解决“链不完整”警告
这个指令的作用对象是 Nginx 本身,不是浏览器:
- ssl_certificate:Nginx 在 TLS 握手时发给客户端的证书列表。必须含域名证书 + 所有中间证书(不含根证书)。
- ssl_trusted_certificate:仅供 Nginx 内部使用,例如验证 OCSP 响应签名或校验双向 TLS 中客户端证书。它不会被发给浏览器,对修复“NET::ERR_CERT_AUTHORITY_INVALID”无效。
正确做法:确保 ssl_certificate 指向 fullchain 文件
所有修复动作都围绕一个核心——让 ssl_certificate 的值指向一个拼接好的 PEM 文件,内容顺序严格为:
- 你的域名证书(
example.com.crt) - 紧接着是中间证书(如
intermediate.crt;若有多级,按信任路径从近到远追加) - 不要包含根证书(Root CA)
合并命令示例:cat example.com.crt intermediate.crt > /etc/nginx/ssl/fullchain.crt
云雀语言模型
云雀是一款由字节跳动研发的语言模型,通过便捷的自然语言交互,能够高效的完成互动对话
下载
然后在配置中明确使用它:ssl_certificate /etc/nginx/ssl/fullchain.crt;ssl_certificate_key /etc/nginx/ssl/example.com.key;
配合 ssl_trusted_certificate 的合理用途
虽然它不修复链缺失,但在以下场景有用,建议一并配置:
- 启用 OCSP stapling 时需验证响应签名:
ssl_trusted_certificate /etc/nginx/ssl/fullchain.crt;ssl_stapling on;ssl_stapling_verify on; - 如果启用了客户端证书认证(mTLS),该文件也用于校验客户端证书是否由可信 CA 签发。
验证是否真正生效
别依赖宝塔界面提示或浏览器缓存,用终端实测:
- 在服务器上运行:
openssl s_client -connect your-domain.com:443 -servername your-domain.com -showcerts 2>/dev/null | grep "subject="
输出中应至少看到两行 subject(你的域名 + 中间 CA 名称)。 - 安卓端可换无痕模式访问,或清除 Chrome 的 HSTS 记录(
chrome://net-internals/#hsts)后重试。