proxy_ssl_trusted_certificate 是 Nginx 用于验证上游 HTTPS 服务器证书合法性的指令,需指定私有 CA 的根证书 PEM 文件,并配合 proxy_ssl_verify on 和 proxy_ssl_name 精确匹配,确保反向代理安全通信。

proxy_ssl_trusted_certificate 是 Nginx 的一个关键指令,用于验证上游(后端)服务器 SSL 证书的合法性——它指定一个包含受信任 CA 根证书(或中间证书)的 PEM 文件,Nginx 会用其中的公钥来验证后端 HTTPS 服务所出示的证书是否由该 CA 签发、是否有效、是否未被吊销(若启用 CRL/OCSP)。在私有 CA 场景下,正确配置此项是实现安全反向代理加密通信的前提。
下面分三部分说明核心要点与实操步骤:
✅ 一、前提:你已拥有可用的私有 CA 及后端服务证书
确保已完成以下基础建设:
- 已在某台主机(如
ca.example.local)上使用 OpenSSL 构建私有 CA- 生成了 CA 私钥
cakey.pem(严格保密) - 生成了自签名根证书
cacert.pem(即你的信任锚,需分发给 Nginx)
- 生成了 CA 私钥
- 后端服务(如
backend.example.local)已申请并获得由该私有 CA 签发的证书(如backend.crt+backend.key),且已正确部署在后端 Web 服务器(如 httpd 或另一台 Nginx)上,并启用 HTTPS(443 端口) - Nginx 所在主机能通过网络访问后端 HTTPS 地址(如
https://backend.example.local:443)
⚠️ 注意:
proxy_ssl_trusted_certificate不用于验证客户端,也不参与 Nginx 自身对外的 HTTPS 服务(那是ssl_certificate干的事),它只管“我作为代理,去连谁、信谁”。
WebChat Voice Proxy下载⚠️ 已弃用 — 该技能已拆分为两个独立技能,以提升模块化程度:**webchat-https-proxy**(HTTPS/WSS 反向代理)和 **webchat-voi...**
✅ 二、配置 Nginx 使用私有 CA 验证后端
在 Nginx 的 location 或 upstream 块中添加以下指令:
location /api/ {
proxy_pass https://backend.example.local:443/;
# 指定信任的私有 CA 根证书(必须是 PEM 格式,可含多个证书)
proxy_ssl_trusted_certificate /etc/nginx/ssl/private-ca-root.pem;
# 强制要求验证后端证书(默认 off,务必开启!)
proxy_ssl_verify on;
# 验证证书中的 Common Name 或 Subject Alternative Name 是否匹配目标主机名
proxy_ssl_verify_depth 2;
proxy_ssl_name "backend.example.local"; # 必须与后端证书的 SAN 或 CN 一致
# (可选)启用 OCSP stapling 提升验证效率(需后端支持)
# proxy_ssl_trusted_certificate 和 proxy_ssl_stapling 需配合使用
}
? 关键点说明:
-
/etc/nginx/ssl/private-ca-root.pem是你私有 CA 的cacert.pem(或合并后的根+中间证书链),不能包含私钥,仅 PEM 格式证书内容(以-----BEGIN CERTIFICATE-----开头) -
proxy_ssl_verify on;是开关,缺省为off,不写等于不验证 → 失去安全意义 -
proxy_ssl_name必须精确匹配后端证书的Subject CN或DNS SAN字段(大小写不敏感,但通配符*.example.local仅匹配一级子域) - 若后端证书由私有 CA 直接签发(无中间 CA),
proxy_ssl_verify_depth 1即可;如有中间层,设为2或更高
✅ 验证是否生效:
修改配置后 nginx -t && nginx -s reload,然后故意将 proxy_ssl_name 改错(如写成 wrong.example.local),再请求接口,应返回 502 Bad Gateway 并在 error log 中看到类似:SSL certificate verify error: unable to get local issuer certificate 或 SSL certificate verify error: certificate is not valid for the requested domain
✅ 三、证书准备与部署建议
- 将私有 CA 的
cacert.pem复制到 Nginx 主机,路径建议统一管理(如/etc/nginx/ssl/),权限设为644,属主root - 不要混用不同 CA 的证书到同一个
proxy_ssl_trusted_certificate文件中,除非你明确信任全部;多 CA 可分别配置不同upstream块 - 若后端使用自签名证书(非私有 CA 签发),则不能用此方式验证 —— 此时只能退而求其次设
proxy_ssl_verify off(不推荐)或改用proxy_ssl_certificate+proxy_ssl_certificate_key进行双向认证(mTLS) - 日常运维中,当私有 CA 证书即将过期,需提前重签新根证书,并同步更新所有依赖它的服务(包括 Nginx 的
proxy_ssl_trusted_certificate文件)
不复杂但容易忽略:信任链完整、proxy_ssl_verify on 显式开启、proxy_ssl_name 匹配准确,这三点齐备,私有 CA 下的后端加密通信才算真正落地。











