最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Nginx 中如何配置 Nginx 仅允许特定的加密算法集
时间:2026-08-10 16:10:49 编辑:袖梨 来源:一聚教程网
Nginx需通过ssl_prefer_server_ciphers on强制服务端优先选择套件,并严格按从左到右顺序配置ssl_ciphers白名单(如ECDHE-RSA-AES128-GCM-SHA256等),同时禁用TLSv1.0/1.1、排除RC4/3DES/MD5/SHA1等弱算法,方能在握手阶段主动拒绝不安全协商。
要在 Nginx 中只允许特定加密算法集,关键不是“加哪些”,而是“明确排除不想要的,并严格限定协商顺序”。这需要从协议层、密钥交换方式、对称加密套件三方面协同控制,否则客户端仍可能协商出弱算法。
强制服务端优先选择套件
默认情况下,TLS 1.2 及更早版本由客户端决定用哪个加密套件。即使你配置了高强度算法,老客户端仍可能选 RSA-SHA 这类不安全组合。必须显式开启:
-
ssl_prefer_server_ciphers on; —— 放在
server或http块中 - TLS 1.3 不受此影响(协议已固定套件),但该指令仍需保留,保障 TLS 1.2 安全
精确定义 ssl_ciphers 列表
列表从左到右即协商优先级,Nginx 取第一个客户端支持的套件。推荐以 ECDHE + AES-GCM / ChaCha20 开头,剔除所有不支持前向保密或已淘汰的算法:
- 只保留含 ECDHE 或 DHE 的套件(确保前向保密)
- 禁用静态 RSA 密钥交换(如
AES128-SHA、RSA-AES256-SHA) - 主动过滤弱算法:
!RC4:!MD5:!SHA1:!DES:!3DES:!EXPORT:!aNULL:!eNULL - 示例写法:
ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384";
限定协议与密钥参数
再强的套件列表,若允许老旧协议或弱参数,仍可能被降级协商:
- 禁用不安全协议:ssl_protocols TLSv1.2 TLSv1.3;(严禁包含 TLSv1.0 或 TLSv1.1)
- 指定高效安全椭圆曲线:ssl_ecdh_curve secp384r1:prime256v1;
- 若需兼容 DHE,必须提供强 DH 参数:ssl_dhparam /etc/nginx/dhparam.pem;(用
openssl dhparam -out dhparam.pem 2048生成)
验证是否真正生效
重载配置后不能只信 nginx -t,必须实测确认:
- 用命令查看实际协商结果:
openssl s_client -connect yourdomain.com:443 -tls1_2 | grep Cipher确认输出为
ECDHE-RSA-AES256-GCM-SHA384类型 - 访问 SSL Labs 测试页,检查 “Cipher Suites” 和 “Key Exchange” 栏是否全部符合预期
- 注意:若 OpenSSL 版本低于 1.1.1 或 Nginx 低于 1.20,部分现代套件将无法启用