Nginx 作为 TLS 客户端与后端建立 mTLS,需协同配置 proxy_ssl_certificate、proxy_ssl_certificate_key、proxy_ssl_trusted_certificate 和 proxy_ssl_verify 等指令,并确保上游服务启用客户端证书校验。

要在 Nginx 代理请求到后端 HTTPS 服务时携带客户端证书(即让 Nginx 作为 TLS 客户端发起带证书的连接),关键不是用 proxy_set_header,而是启用并配置 proxy_ssl_* 系列指令。这属于 Nginx 到上游(upstream)的 mTLS 场景,和客户端到 Nginx 的双向认证是两回事。
确认 Nginx 具备 TLS 客户端能力
Nginx 必须是 1.7.0 及以上版本,且编译时启用了 OpenSSL 支持(默认主流发行版都满足)。低于 1.7.1 的版本不支持 proxy_ssl_certificate 等指令,配置会直接报错。
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
准备三类必要文件
-
客户端证书文件(PEM 格式):Nginx 向后端出示的身份凭证,通常含完整证书链(不含私钥),路径如
/etc/nginx/ssl/client.crt -
对应私钥文件(PEM 格式):必须与证书匹配,权限建议设为
600,路径如/etc/nginx/ssl/client.key -
上游 CA 根证书(PEM 格式):用于验证后端服务器证书是否可信,路径如
/etc/nginx/ssl/upstream-ca.pem。若后端用的是公共 CA(如 Let’s Encrypt),此文件可省略,但强烈建议显式指定以增强可控性
在 location 或 upstream 中配置 proxy_ssl 指令
以下配置需放在 location 块内(或 upstream 块中,效果等价),且 proxy_pass 目标必须是 https:// 协议:
proxy_pass https://backend:8443;
proxy_ssl_certificate /etc/nginx/ssl/client.crt;
proxy_ssl_certificate_key /etc/nginx/ssl/client.key;
proxy_ssl_trusted_certificate /etc/nginx/ssl/upstream-ca.pem;
proxy_ssl_verify on;
proxy_ssl_protocols TLSv1.2 TLSv1.3;
proxy_ssl_session_reuse on;
说明:
– proxy_ssl_verify on 是关键,关闭它就退化为单向 TLS,后端无法确认 Nginx 身份;
– proxy_ssl_session_reuse on 可显著降低 TLS 握手开销,推荐开启;
– 不要遗漏 proxy_ssl_protocols,避免协商过时协议(如 TLSv1.0)。
确保后端服务配合启用客户端证书校验
仅 Nginx 单方面提供证书没用,后端(如 Spring Boot、Envoy、Nginx 自身等)必须:
– 监听 HTTPS 端口并启用 client certificate required(例如 Nginx 后端需配 ssl_verify_client on);
– 配置信任 Nginx 所用客户端证书的签发 CA(即你准备的 upstream-ca.pem 对应的根);
– 若使用自建 CA,请确认后端加载的是同一份 PEM 文件,包括 BEGIN/END 行和换行符完全一致。

















