ssl_trusted_certificate仅用于nginx内部验证客户端或上游服务证书,不参与发送给浏览器的证书链;其内容须为pem格式的受信ca证书,与ssl_certificate分工明确,不可混用。

ssl_trusted_certificate 不是用来让浏览器信任你的网站,也不参与你发给客户端的证书链。它只在 Nginx 需要“验证别人”时才起作用——比如验证客户端证书,或者验证你代理访问的上游 HTTPS 服务的证书是否可信。
它专用于 Nginx 内部校验,不是给浏览器看的
很多人误以为配置了 ssl_trusted_certificate 就能解决浏览器报“证书不受信任”或“证书链不完整”的问题。其实完全不能。浏览器信任与否,只看你配置的 ssl_certificate 文件里有没有包含正确的域名证书 + 中间证书(不含根证书),且顺序正确。ssl_trusted_certificate 的内容永远不会发给浏览器,Nginx 也不会用它补全自己的证书链。
真正生效的两种场景
这个指令只有在以下配置启用后才会被读取:
- 启用客户端证书认证(mTLS)时:设置 ssl_verify_client on 后,Nginx 会用 ssl_trusted_certificate 文件里的 CA 证书,逐级校验用户提交的客户端证书签名是否有效、是否由你允许的 CA 签发;
- 反向代理并验证上游 HTTPS 服务时:注意——这里实际应使用 proxy_ssl_trusted_certificate(属于 proxy_ssl_* 系列),而非 ssl_trusted_certificate。但很多文档和配置中容易混淆。若你确实在 server 块中用了 ssl_trusted_certificate 并配合 proxy_ssl_verify on,则 Nginx 可能尝试复用它(取决于版本与上下文),不过更规范的做法是明确指定 proxy_ssl_trusted_certificate。
文件内容必须严格符合要求
该文件必须是 PEM 格式,且只含受信的 CA 证书:
- 只能包含根证书和/或中间证书,绝对不能包含你的域名证书或私钥;
- 多个证书可按任意顺序排列,Nginx 会自动挑选能构建信任链的组合;
- 每张证书需以 -----BEGIN CERTIFICATE----- 开头、-----END CERTIFICATE----- 结尾;
- 推荐单独存放,路径如 /etc/nginx/ssl/trusted-ca.pem,避免与 ssl_certificate 共用文件。
它和 ssl_certificate 是分工明确的两件事
可以这样理解:
- ssl_certificate 是你“出示的身份证明”——发给浏览器看的证书链;
- ssl_trusted_certificate 是你“相信谁的名单”——用来判断别人(客户端或 upstream)的身份是否可靠。
Nginx 不读系统 CA 仓库(如 /etc/ssl/certs/ca-certificates.crt),所有信任锚点必须显式配置。漏配、路径错误、权限不足或内容损坏,都会导致 “unable to get local issuer certificate” 类错误,使验证失败、连接中断。











