ssl_trusted_certificate仅用于Nginx内部验证客户端或上游服务器证书,不参与向客户端发送证书;需在启用ssl_verify_client或proxy_ssl_verify时配置PEM格式CA证书链。

ssl_trusted_certificate 指令本身不参与服务器向客户端发送证书的过程,它只在需要**验证客户端或上游服务器证书**时才起作用——也就是当 Nginx 作为 TLS 客户端(如反向代理访问 HTTPS 后端)或启用双向认证(mTLS)时,用来指定信任的根/中间 CA 证书集合。
它和 ssl_certificate 的分工很明确
很多人混淆 ssl_certificate 和 ssl_trusted_certificate,关键区别在于:
- ssl_certificate:是 Nginx 自己要“出示”的证书链(即发给浏览器的那串证书,含域名证书 + 中间证书),用于证明自己身份;
- ssl_trusted_certificate:是 Nginx 自己“相信谁”的依据(即本地存的信任锚点),用于验证别人(客户端或 upstream)给它的证书是否可信。
实际生效的两种典型场景
该指令只有在开启相应验证机制后才会被读取和使用:
- 验证上游 HTTPS 服务(proxy_ssl_verify on):Nginx 代理请求到另一个 HTTPS 接口(比如 https://api.internal)时,需确认对方证书合法。此时用 proxy_ssl_trusted_certificate 指定信任的 CA(注意:这是 proxy_* 系列指令,不是 ssl_*);
- 启用客户端证书认证(ssl_verify_client on):要求访客上传由指定 CA 签发的证书登录。Nginx 会用 ssl_trusted_certificate 文件里的根/中间证书来逐级校验客户端证书的签名链是否完整可信。
文件内容必须是 PEM 格式、且仅含 CA 证书
这个文件不能包含私钥,也不能包含你的域名证书;它应只包含一个或多个受信的 CA 证书(根证书 + 中间证书均可),顺序不限,但每张证书需以 -----BEGIN CERTIFICATE----- 开头、-----END CERTIFICATE----- 结尾。Nginx 会从中挑选能构建出完整信任链的证书进行验证。
为什么不能只靠系统默认 CA 存储?
因为 Nginx 不读取操作系统级的 CA 仓库(如 /etc/ssl/certs/ca-certificates.crt)。它完全依赖配置中显式指定的 ssl_trusted_certificate 或 proxy_ssl_trusted_certificate 文件。如果你没配,或路径错误、权限不足、内容无效,就会出现 “unable to get local issuer certificate” 类错误,导致验证失败、连接中断。











