要通过PCI DSS合规扫描,Nginx TLS配置必须禁用TLSv1.0/1.1、启用ECDHE前向保密套件、强制Secure/HttpOnly/SameSite Cookie、注入HSTS与X-Content-Type-Options响应头,且所有指令须带always参数并经nginx -t校验。

要让 Nginx 的 TLS 配置通过 PCI DSS 合规扫描,核心不是证书有多“新”,而是运行时通信行为必须严格满足四项硬性基线:禁用不安全协议、启用前向保密套件、强制安全 Cookie 属性、注入关键响应头。所有配置项都需经 nginx -t 校验并带 always 参数生效。
禁用 TLSv1.0 和 TLSv1.1
这是 PCI DSS 最刚性门槛——只要配置中存在 TLSv1 或 TLSv1.1,任何合规扫描工具(如 Qualys SSL Labs)都会直接判为失败。
- 必须显式声明:
ssl_protocols TLSv1.2 TLSv1.3; - 彻底删除配置文件中所有含
TLSv1的行,包括注释里的旧模板 - 修改后务必执行
nginx -t检查语法,再用nginx -s reload生效
配置 PCI-DSS 认可的加密套件
不能只看名称含 “AES256” 就认为安全,必须同时满足密钥交换(ECDHE)、对称加密(AES-GCM 或 CHACHA20-POLY1305)、哈希(SHA256+)三重约束,并剔除所有已禁用组件。
- 推荐套件(经实测通过扫描):
ssl_ciphers "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384"; - 必须开启服务端优先:
ssl_prefer_server_ciphers on;(防客户端降级攻击) - 建议指定强椭圆曲线:
ssl_ecdh_curve secp384r1;(避免协商到弱曲线)
强制 Secure/HttpOnly/SameSite Cookie 属性
在反向代理场景下,后端生成的 Cookie 极易丢失 Secure 标志。PCI DSS 要求所有会话 Cookie 必须同时具备这三个属性,且覆盖所有响应状态(含 302、4xx)。
- 使用
add_header Set-Cookie "JSESSIONID=$sessionid; Path=/; HttpOnly; Secure; SameSite=Lax" always;——always不可省略,否则仅对 2xx 响应生效 - 若前端 JS 需读取部分 Cookie(如刷新令牌),应拆分命名:敏感会话 ID 设为
HttpOnly,控制类 Cookie 单独定义并豁免
注入 HSTS 与 X-Content-Type-Options 响应头
这两项是 PCI 扫描高频扣分项,缺一不可,且参数必须符合最小作用域与有效期要求。
- HSTS:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always; - 内容类型保护:
add_header X-Content-Type-Options "nosniff" always; - 建议同步启用 OCSP Stapling:
ssl_stapling on; ssl_stapling_verify on;,提升证书状态验证效率与安全性


















