nginx反向代理中需用proxy_ssl_ciphers显式配置回源链路强密码白名单,配合proxy_ssl_protocols和proxy_ssl_verify实现安全通信,禁用弱算法并确保前向保密与证书校验。

在 Nginx 反向代理中,无法对后端服务器的 SSL 密码套件做“黑名单式”动态过滤,但可以通过 显式指定强密码白名单 实现等效效果——即只允许高安全等级的套件协商,从源头排除所有已知风险算法。
明确区分两个 TLS 链路
反向代理涉及两段独立的 HTTPS 连接:
-
客户端 → Nginx(前端链路):由
ssl_ciphers控制,影响浏览器等访问者 -
Nginx → 后端服务器(回源链路):由
proxy_ssl_ciphers控制,影响 Nginx 与上游服务(如 Tomcat、Node.js)之间的加密通信
两者必须分别配置,且不能混用。你问的安全套件控制,主要落在第二项上。
为回源链路设置强密码白名单
proxy_ssl_ciphers 必须写在 location 或 server 块内,且与 proxy_pass 同级才生效。推荐写法如下:
location /api/ {
proxy_pass https://backend-server;
proxy_ssl_protocols TLSv1.2 TLSv1.3;
proxy_ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305';
proxy_ssl_ecdh_curve prime256v1;
proxy_ssl_verify on;
proxy_ssl_trusted_certificate /path/to/backend-ca.crt;
}
关键点说明:
- 不包含
RC4、3DES、SHA1、MD5、静态RSA密钥交换等弱算法 - 全部套件均支持前向保密(PFS)和 AEAD 加密
- 配合
proxy_ssl_protocols TLSv1.2 TLSv1.3彻底禁用 TLS 1.0/1.1 -
proxy_ssl_verify on启用证书校验,防止中间人攻击
避免常见误区
以下做法无效或危险,需规避:
- 试图用
if或变量动态修改proxy_ssl_ciphers:Nginx 不支持运行时切换 TLS 套件 - 省略
proxy_ssl_protocols:默认可能启用旧协议,削弱密码策略效果 - 未启用
proxy_ssl_verify:即使密码强,若不校验证书,仍可能被劫持到恶意后端 - 把前端
ssl_ciphers配置误放到location内:它只在http或server级生效,对回源无影响
验证是否生效
可通过 OpenSSL 手动测试 Nginx 到后端的 TLS 协商能力:
openssl s_client -connect backend-server:443 -cipher 'ECDHE-RSA-AES128-GCM-SHA256' -tls1_2
再尝试一个被禁用的套件(如 AES128-SHA),应失败连接。也可用在线工具(如 SSL Labs 的 SSL Client Test)模拟不同客户端行为,确认弱套件确实无法握手。











