nginx https合规配置需五要素齐备:启用tlsv1.2+并禁用弱协议,使用ecdhe前向保密套件,部署含完整链的fullchain.pem并启用ocsp stapling,强制http跳转与hsts(含includesubdomains及preload),私钥权限严格设为600。

要让 Nginx 的 HTTPS 配置真正支撑 Web 安全合规需求,关键不是“开了 HTTPS”,而是让每个环节都经得起审计——协议版本、密钥强度、加密套件、证书链完整性、传输行为控制,五者缺一不可。
必须启用 TLS 1.2 及以上并禁用弱协议
浏览器和监管机构(如等保2.0、GDPR、HIPAA)已全面弃用 TLS 1.0/1.1。Nginx 必须显式声明支持的协议:
-
ssl_protocols TLSv1.2 TLSv1.3; - 禁止回退:不写
TLSv1.1或更低,也不依赖默认值 - 验证 OpenSSL 版本 ≥ 1.1.1w(执行
nginx -V | grep openssl确认)
使用强密钥与前向保密(PFS)加密套件
静态 RSA 密钥交换已被视为高风险,必须淘汰:
- 私钥至少 RSA 2048 位,或更优选择 ECC P-256/P-384
- 套件仅保留 ECDHE 开头的组合,确保每次会话密钥唯一:
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
- 关闭服务端优先协商:
ssl_prefer_server_ciphers off;
部署完整证书链与 OCSP Stapling
单放域名证书会导致部分客户端(尤其是移动端)验证失败:
-
ssl_certificate必须指向含根证书 + 所有中间证书的fullchain.pem(非仅cert.pem) - 启用 OCSP Stapling 缩短握手延迟、避免向 CA 泄露用户访问行为:
ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 1.1.1.1 valid=300s;
强制 HTTPS 并加固传输行为
防止降级、泄露与会话劫持:
- 全站跳转:80 端口
return 301 https://$host$request_uri; - HSTS 头必须包含
includeSubDomains,建议加preload(提交前确认所有子域 HTTPS 就绪):add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always; - 关闭会话票据防密钥泄露:
ssl_session_tickets off; - 设置合理会话缓存:
ssl_session_cache shared:SSL:10m; ssl_session_timeout 4h;
私钥与权限管控不可绕过
合规检查常现场核查文件权限:
- 私钥文件(
.key)权限必须为600(即chmod 600 /etc/nginx/ssl/privkey.pem) - 不得设密码(否则 Nginx 启动失败)
- 路径建议隔离,如
/etc/nginx/ssl/prod/,避免混用测试密钥
不复杂但容易忽略











