nginx安全加固应采用白名单式精简声明,必须在server块中配置ssl_protocols、ssl_ciphers(显式列举强套件)、ssl_prefer_server_ciphers三项,禁用不安全协议与算法,并启用hsts、ocsp stapling和server_tokens off。

直接配置黑名单不是推荐做法,Nginx 安全加固的核心是白名单式精简声明,而非依赖 ! 符号剔除弱算法。黑名单容易遗漏、版本兼容性差,且 OpenSSL 解析时可能产生意外行为。
明确禁用不安全协议和算法
必须在 server 块中设置以下三项,缺一不可:
-
ssl_protocols TLSv1.2 TLSv1.3;
不写TLSv1.1或更低版本,哪怕为兼容旧设备——降级漏洞(如 POODLE、BEAST)会立刻暴露 -
ssl_ciphers使用显式列举的强套件列表,不带任何!黑名单指令 -
ssl_prefer_server_ciphers on;
把密码协商控制权收归服务端,防止客户端绕过策略强行选弱套件
只保留真正安全的密码套件
全部套件需同时满足:前向保密(ECDHE)、认证加密(AEAD)、密钥长度 ≥128 位、无 SHA1/MD5/RC4/DES/3DES/CBC 模式
推荐配置(可直接复制使用):
ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305';
该列表已天然排除:
- 所有含
RC4、DES、3DES、MD5、SHA1(非 AEAD 场景)的套件 - 所有
RSA密钥交换(无前向保密) - 所有
CBC模式(易受 Lucky13 等侧信道攻击) - 所有
EXPORT、NULL、aNULL、eNULL类套件
配合关键加固项提升整体防御力
- 启用 HSTS 防止首次 HTTP 请求被劫持:
<font color="red">add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;</font> - 开启 OCSP Stapling 提升证书可信度并防窥探:
ssl_stapling on; ssl_stapling_verify on; ssl_trusted_certificate /etc/nginx/ssl/ca_bundle.crt; resolver 8.8.8.8 8.8.4.4 valid=300s;
- 隐藏 Nginx 版本减少指纹暴露:
<font color="red">server_tokens off;</font>
不复杂但容易忽略。











