一聚教程网:一个值得你收藏的教程网站

热门教程

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 这类不安全组合。必须显式开启:

  1. ssl_prefer_server_ciphers on; —— 放在 serverhttp 块中
  2. TLS 1.3 不受此影响(协议已固定套件),但该指令仍需保留,保障 TLS 1.2 安全

精确定义 ssl_ciphers 列表

列表从左到右即协商优先级,Nginx 取第一个客户端支持的套件。推荐以 ECDHE + AES-GCM / ChaCha20 开头,剔除所有不支持前向保密或已淘汰的算法:

  1. 只保留含 ECDHEDHE 的套件(确保前向保密)
  2. 禁用静态 RSA 密钥交换(如 AES128-SHARSA-AES256-SHA
  3. 主动过滤弱算法:!RC4:!MD5:!SHA1:!DES:!3DES:!EXPORT:!aNULL:!eNULL
  4. 示例写法:

    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";

限定协议与密钥参数

再强的套件列表,若允许老旧协议或弱参数,仍可能被降级协商:

  1. 禁用不安全协议:ssl_protocols TLSv1.2 TLSv1.3;(严禁包含 TLSv1.0 或 TLSv1.1)
  2. 指定高效安全椭圆曲线:ssl_ecdh_curve secp384r1:prime256v1;
  3. 若需兼容 DHE,必须提供强 DH 参数:ssl_dhparam /etc/nginx/dhparam.pem;(用 openssl dhparam -out dhparam.pem 2048 生成)

验证是否真正生效

重载配置后不能只信 nginx -t,必须实测确认:

  1. 用命令查看实际协商结果:

    openssl s_client -connect yourdomain.com:443 -tls1_2 | grep Cipher

    确认输出为 ECDHE-RSA-AES256-GCM-SHA384 类型

  2. 访问 SSL Labs 测试页,检查 “Cipher Suites” 和 “Key Exchange” 栏是否全部符合预期
  3. 注意:若 OpenSSL 版本低于 1.1.1 或 Nginx 低于 1.20,部分现代套件将无法启用

热门栏目