nginx中应严格配置ssl_ciphers仅保留ecdhe/rsa-aes128/256-gcm-sha256/384、chacha20-poly1305等pfs+aead强套件,禁用rc4、3des、md5、sha1等弱算法,并配合ssl_protocols tlsv1.2 tlsv1.3和ssl_prefer_server_ciphers on实现握手阶段主动拦截。

直接在 Nginx 的 HTTPS server 块中明确限定加密套件,并关闭弱算法支持,就能有效拦截使用 RC4、3DES、MD5、SHA1 等不安全算法的连接。核心不是“事后检测”,而是从握手阶段就拒绝协商。
禁用弱加密套件并锁定强算法
在 server 块(监听 443 端口)中配置以下指令:
-
严格指定 ssl_ciphers:只保留现代、前向保密、128 位以上强度的套件,例如:
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384; -
强制服务端优先:加上
ssl_prefer_server_ciphers on;,防止客户端绕过服务器策略选择弱套件 -
显式排除已知不安全算法:确保配置中不含
RC4、3DES、DES、MD5、SHA1、aNULL、eNULL、ADH、DH等关键词
同步禁用不安全协议版本
仅限制加密套件不够,低版本协议(如 SSLv2/SSLv3/TLSv1.0/TLSv1.1)本身存在设计缺陷,容易配合弱算法被利用:
- 使用
ssl_protocols TLSv1.2 TLSv1.3;(推荐仅保留这两个) - 避免写成
TLSv1 TLSv1.1 TLSv1.2或更宽松形式 - 确认 OpenSSL 库版本 ≥ 1.1.1(TLSv1.3 要求),否则 TLSv1.3 不生效
验证是否真正拦截成功
改完配置后必须验证,不能仅依赖语法检查:
- 重载 Nginx:
nginx -s reload - 用
nmap扫描实际启用的套件:nmap --script ssl-enum-ciphers -p 443 your-domain.com - 观察输出中是否还出现
RC4_128、3DES_EDE_CBC、SHA1等字样;若已消失,且只显示strong或secure,说明拦截生效 - 可配合浏览器开发者工具 → Security 标签页,查看当前连接使用的协议和套件
配套基础防护不可省略
单独禁算法效果有限,需与以下措施协同:
- 隐藏版本信息:
server_tokens off;(放在 http 或 server 块) - 关闭危险 HTTP 方法:
if ($request_method !~ ^(GET|HEAD|POST)$) { return 405; } - 启用 HSTS 强制 HTTPS:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always; - 设置关键安全响应头:
X-Frame-Options、X-Content-Type-Options、X-XSS-Protection











