必须在upstream或location块中配置proxy_ssl_protocols TLSv1.2 TLSv1.3,禁用TLSv1.0/TLSv1.1;同步启用proxy_ssl_verify on、proxy_ssl_server_name on、强cipher白名单及可信证书校验,方可满足PCI DSS等合规要求。

要让 Nginx 反向代理到后端 HTTPS 服务时的出站 TLS 连接真正通过合规审计(如 PCI DSS、等保2.0、NIST SP 800-52r2),proxy_ssl_protocols 不能单独起作用——它只是合规链中的一环,必须在正确位置、配对关键指令、并经实测验证才算落地。
必须写在 upstream 或 location 块内
该指令不继承自 http 或 server 块,写在顶层完全无效。只在实际发起 HTTPS 回源的位置才生效:
- 推荐在
upstream块内直接配置,便于统一管理与审计追溯 - 也可放在含
proxy_pass https://...的location块中,且紧邻该指令 - 若
proxy_pass指向 HTTP 地址,此指令自动忽略,不产生任何效果
协议值必须严格白名单化
合规审计不接受“默认支持”或“未显式禁用”,必须明确列出仅允许的版本:
在 Arc Network 上使用 Credex 协议为 AI 代理提供无担保信贷。可凭声誉借 USDC、偿还债务提升额度、提供流动性或通过 Circle Bridge 跨链管理 USDC。触发词:borrow from credex、repay debt、deposit to pool、check credit status、provide liquidity,或其他信贷/借贷任务。
- ✅ 正确:
proxy_ssl_protocols TLSv1.2 TLSv1.3; - ✅ 兼容性退让(后端暂不支持 TLS 1.3):
proxy_ssl_protocols TLSv1.2; - ❌ 错误:含
TLSv1、TLSv1.1、SSLv3等任意旧版本标识 - ⚠️ 注意:Nginx 1.19.4+ 已移除 TLSv1 支持,但显式排除仍是审计硬性要求
必须同步启用证书强校验与 SNI
只限协议不验证证书,等于开着门锁却没装门闩。四项指令需共存于同一作用域:
-
proxy_ssl_verify on;—— 打开校验开关(默认是 off) -
proxy_ssl_trusted_certificate /etc/ssl/certs/ca-certificates.crt;—— 指向可信根证书包;私有 CA 需追加其根证书 -
proxy_ssl_name "api.example.com";—— 显式指定目标域名,匹配证书 SAN;不可用$host替代 -
proxy_ssl_server_name on;—— 启用 SNI,确保多域名或云后端能正确路由
必须限定加密套件并匹配协议能力
协议和 cipher 必须协同,否则握手失败或静默降级:
- 若用
TLSv1.3,cipher 必须为 TLS 1.3 原生套件:proxy_ssl_ciphers "TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256"; - 若兼容
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"; - 禁用含 SHA1、RC4、DES、CBC 模式等弱算法套件
必须实测验证而非仅信语法检查
重载配置后,需主动确认出站行为是否真实符合预期:
- 用 OpenSSL 测试:
openssl s_client -connect api.example.com:443 -tls1_2 -servername api.example.com应成功 - 同命令换
-tls1_1应失败,返回类似protocol is down的错误 - 查 Nginx error log,搜索
certificate verify failed或SSL_do_handshake() failed线索 - 必要时临时开启 debug 日志:
error_log /var/log/nginx/error.log debug;

















