ssl_trusted_certificate的核心目的是为Nginx验证上游HTTPS/gRPC服务证书提供受信任的根和中间CA证书;它仅在proxy_ssl_verify on启用时生效,不用于Nginx自身对外服务证书。

配置 ssl_trusted_certificate 的核心目的,是让 Nginx 在验证上游 HTTPS 或 gRPC 服务证书时,有明确的、受信任的根和中间 CA 证书可依。它不用于 Nginx 自己对外提供服务的证书,只在主动校验后端(即 proxy_ssl_verify on)时起作用。
什么时候必须用 ssl_trusted_certificate
当 Nginx 作为反向代理,后端服务使用以下任一情况时,客户端或 Nginx 自身访问会报类似 unable to get local issuer certificate 错误:
- 自签名证书(如测试环境 API)
- 企业私有 CA 签发的证书(如 HashiCorp Vault、OpenSSL 自建 CA)
- 证书链不完整:后端只返回了站点证书,没附带中间证书
准备正确的 PEM 格式证书文件
这个文件必须是纯文本 PEM 格式,仅含公钥证书,不含私钥、CSR 或非证书内容。顺序和内容要准确:
- 把根 CA 证书放在最底部
- 中间 CA 证书按签发关系从下往上排列(即:中间证书 → 根证书)
- 不要放入后端服务自己的证书(server.crt)
- 可用
openssl x509 -in ca.crt -text -noout验证是否为有效证书
Nginx 配置中关键指令组合
单独写 ssl_trusted_certificate 不生效,必须配合启用上游 SSL 校验:
-
proxy_ssl_verify on;—— 必须开启,否则 Nginx 完全不校验证书 -
ssl_trusted_certificate /etc/nginx/ssl/trusted-ca-bundle.pem;—— 指向你准备好的完整 PEM 文件 -
proxy_ssl_name "backend.example.com";—— 显式指定期望的 SNI 名称,避免 CN/SAN 匹配失败 -
proxy_ssl_protocols TLSv1.2 TLSv1.3;—— 建议限定协议版本,提升安全性
常见错误排查点
即使配置看似正确,仍可能失败,注意这几个细节:
- 路径必须是绝对路径,且 Nginx worker 进程有读取权限(如 SELinux 启用需检查上下文)
- 文件末尾不能有多余空行或不可见 BOM 字符(尤其 Windows 编辑后保存为 UTF-8 with BOM)
- 若后端是 gRPC over TLS,还需额外启用
grpc_ssl_verify on; - 日志中开启
error_log /var/log/nginx/error.log debug;可看到详细握手与验证过程


















