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 这类不安全组合。必须显式开启:
server 或 http 块中列表从左到右即协商优先级,Nginx 取第一个客户端支持的套件。推荐以 ECDHE + AES-GCM / ChaCha20 开头,剔除所有不支持前向保密或已淘汰的算法:
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";
再强的套件列表,若允许老旧协议或弱参数,仍可能被降级协商:
openssl dhparam -out dhparam.pem 2048 生成)重载配置后不能只信 nginx -t,必须实测确认:
openssl s_client -connect yourdomain.com:443 -tls1_2 | grep Cipher
确认输出为 ECDHE-RSA-AES256-GCM-SHA384 类型