nginx生产环境https安全配置核心是启用tlsv1.2/tlsv1.3、禁用sslv3/tlsv1.0/tlsv1.1,配合pfs强密钥套件、ocsp stapling、hsts、会话缓存及私钥权限管控等,每项均对应明确防御目标与合规要求。

Linux Nginx 生产环境 HTTPS 安全配置,核心是“协议够新、加密够强、响应够稳、头够安全”。不是堆参数,而是每项配置都有明确防御目标和运行依据。
启用 TLS 1.2/1.3 并禁用老旧协议
只允许 TLS 1.2 和 TLS 1.3,彻底关闭 SSLv3、TLS 1.0 和 TLS 1.1。这些旧版本存在已知漏洞(如 POODLE、BEAST),主流浏览器已逐步弃用。
- 在 server 或 http 块中添加:
ssl_protocols TLSv1.2 TLSv1.3; - 避免写成
TLSv1.1 TLSv1.2 TLSv1.3,哪怕只是多留一个版本,也等于留了后门 - 注意:Nginx 1.13.0+ 才原生支持 TLS 1.3;若使用较老版本(如 CentOS 7 默认的 1.12),需升级或打补丁
配置高强度且兼容性合理的加密套件
优先选用前向保密(PFS)强、无已知弱点的组合,同时兼顾主流客户端(Chrome/Firefox/Safari/Android/iOS)支持度。
- 推荐配置(适配现代终端):
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256'; - 禁用不安全算法:明确排除
MD5、SHA1、RC4、DES、3DES、NULL、EXPORT - 用
openssl ciphers -s -tls1_2 "YOUR_CIPHER_STRING"验证是否生效,确保输出不含淘汰算法
启用关键性能与安全增强机制
这些不是可选项,而是生产环境 HTTPS 的基础能力支撑:
-
OCSP Stapling:减少客户端证书状态查询延迟,提升 TLS 握手速度
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 1.1.1.1 valid=300s;
resolver_timeout 5s; -
会话缓存:复用 TLS 会话,降低 CPU 开销
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 4h; -
HSTS 强制 HTTPS:防止中间人降级攻击,建议含子域并开启预加载
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
(首次上线可先设为max-age=300观察,确认无误后再延长)
配套加固与运维要点
HTTPS 不只是加个证书,它依赖整条链路的安全基线:
- 私钥权限必须严格:
chmod 400 /etc/nginx/ssl/example.com.key,且属主为root - 隐藏 Nginx 版本号:
server_tokens off;(放在 http 块内) - HTTP 自动跳转 HTTPS:
server { listen 80; server_name example.com; return 301 https://$host$request_uri; } - 证书更新自动化:Let’s Encrypt 用户务必配置
certbot renew --quiet --post-hook "systemctl reload nginx"并加入 cron - 定期验证:用 SSL Labs Test 扫描评分,目标 A+;关注 OCSP 响应、HSTS 头、密钥交换强度等细节项











