必须在upstream或location作用域内配置proxy_ssl_protocols TLSv1.2 TLSv1.3,禁用TLSv1.0/TLSv1.1;同步启用proxy_ssl_verify on、强cipher白名单及proxy_ssl_server_name on,满足PCI DSS等合规要求。

要让 Nginx 在反向代理上游 HTTPS 服务时禁用不安全的旧版 TLS 协议(如 TLSv1.0、TLSv1.1),必须在 proxy_pass 生效的作用域内 配置 proxy_ssl_protocols,而非全局 ssl_protocols(那是控制客户端连 Nginx 的协议)。合规审计通常要求仅允许 TLSv1.2 及以上,且需配合其他 SSL 客户端行为一并收紧。
明确作用域:只在 upstream 或 location 中设置
该指令不能写在 http 或 server 块顶层,否则无效。正确位置是:
- 定义 upstream 时直接写在块内(推荐,便于复用)
- 或在具体 location 中、proxy_pass 指令附近配置
示例(upstream 方式):
upstream secure_api {server api.example.com:443;
proxy_ssl_protocols TLSv1.2 TLSv1.3;
proxy_ssl_verify on;
proxy_ssl_trusted_certificate /etc/ssl/certs/ca-certificates.crt;
proxy_ssl_name "api.example.com";
proxy_ssl_server_name on;
}
严格限定协议版本,禁用已淘汰协议
现代合规基线(如 PCI DSS、NIST SP 800-52r2、等保2.0)明确要求禁用 TLSv1.0 和 TLSv1.1。配置中不得出现这些值:
- ✅ 正确:
proxy_ssl_protocols TLSv1.2 TLSv1.3; - ❌ 错误:含
TLSv1、TLSv1.1、SSLv3等任意旧版本 - ⚠️ 注意:Nginx 1.19.4+ 默认已移除 TLSv1 支持,即使写入也不会生效;但显式排除更清晰可审计
同步关闭弱加密套件与降级风险
仅限制协议不够,还需防止协商出不安全的 cipher suite:
- 用
proxy_ssl_ciphers显式指定强套件,例如:proxy_ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384"; - 添加
proxy_ssl_prefer_server_ciphers off;(默认即 off),确保优先使用客户端(即 Nginx)提供的强套件列表 - 避免使用
!aNULL:!eNULL:!EXPORT:!RC4:!3DES:!MD5:!PSK:!SRP:!CAMELLIA类黑名单方式,审计更倾向白名单式精确控制
启用证书校验并确保 SNI 正确传递
禁用旧协议后,若仍用 proxy_ssl_verify off,会削弱整体安全性,不符合审计要求。必须开启验证,并配齐依赖项:
proxy_ssl_verify on;-
proxy_ssl_trusted_certificate指向受信根证书路径(如系统 ca-bundle) -
proxy_ssl_name显式声明目标域名,用于证书 SAN 匹配 -
proxy_ssl_server_name on;确保 SNI 正确发送,尤其对接云 API 或泛域名证书时不可省略











