ssl_trusted_certificate仅用于nginx验证客户端证书或ocsp响应签名,不参与向浏览器发送的证书链;服务端需用ssl_certificate指定含域名证书和中间证书的fullchain.pem文件。

ssl_trusted_certificate 不是用来让浏览器信任你网站的,它只供 Nginx 自己用 —— 用于验证别人(客户端或上游服务器)的身份。
它不解决“证书链不完整”警告
浏览器提示“您的连接不是私密连接”或 curl 报 CERTIFICATE_VERIFY_FAILED,问题出在服务端发给客户端的证书链缺失。这和 ssl_trusted_certificate 完全无关。
- Nginx 发送给浏览器的证书,只来自
ssl_certificate指向的文件 - 这个文件必须包含:你的域名证书 + 所有中间证书(按信任路径顺序拼接,不含根证书)
- 正确做法是合并生成
fullchain.pem,然后配置:ssl_certificate /path/to/fullchain.pem;
它真正起作用的两个场景
只有在这两种情况下,Nginx 才会读取并使用 ssl_trusted_certificate 文件:
-
启用客户端证书认证(mTLS)时:
当设置ssl_verify_client on;,Nginx 用该文件里的 CA 证书去验证用户提交的客户端证书是否由你认可的机构签发 -
OCSP stapling 验证响应签名时:
启用ssl_stapling on;和ssl_stapling_verify on;后,Nginx 需要校验 OCSP 响应是否被可信 CA 签名,此时依赖此文件
文件内容与格式要求
该指令指向的 PEM 文件必须严格满足以下条件:
- 只含 CA 证书(根证书和/或中间证书),不能有私钥、不能有你的域名证书
- 多个证书可按任意顺序拼接(Nginx 会自动识别),常用命令:
cat root.crt intermediate.crt > trusted_ca.pem - 验证是否有效:
openssl crl2pkcs7 -nocrl -certfile trusted_ca.pem | openssl pkcs7 -print_certs -noout
能正常输出证书信息即合法
反向代理上游时注意别用错指令
如果你在 location 块中用 proxy_pass https://... 并开启 proxy_ssl_verify on;,验证上游证书用的是:proxy_ssl_trusted_certificate(不是 ssl_trusted_certificate)
- 两者功能相似,但作用域不同:前者用于代理场景,后者用于当前 server 的 TLS 终止场景
- 配置位置也不同:
proxy_ssl_trusted_certificate必须写在location或upstream块内











