直接禁用不安全协议和弱密码套件是防御Heartbleed、POODLE等漏洞最有效方式;需在Nginx中配置ssl_protocols TLSv1.2 TLSv1.3,ssl_ciphers限定强套件,并通过nmap、openssl及SSL Labs实测验证。

直接禁用不安全协议和弱密码套件,是防御心脏出血(Heartbleed)、POODLE 等历史漏洞最有效的方式。这些漏洞大多依赖旧协议实现缺陷或过时加密算法,只要服务器不协商、不启用它们,攻击面就彻底消失。
禁用 SSLv2/SSLv3 和 TLS 1.0/1.1
POODLE(CVE-2014-3566)利用 SSL 3.0 的填充验证缺陷,而 TLS 1.0/1.1 同样存在 BEAST、CRIME 等已知风险。现代标准(如 PCI DSS、RFC 8996)已明确废弃这些版本。
- 在 Nginx 的 http 或 server 块中设置:
ssl_protocols TLSv1.2 TLSv1.3; - 确保配置中不出现
SSLv2、SSLv3、TLSv1、TLSv1.1字样 - 重启前用
nginx -t校验语法,再执行nginx -s reload
清除所有弱加密套件
心脏出血本身是 OpenSSL 实现漏洞(CVE-2014-0160),但后续暴露的私钥若被用于弱算法通信,仍会放大风险。而 POODLE、SWEET32、FREAK 等均直接受套件影响——比如 3DES、RC4、EXPORT、MD5、NULL、ANON 类套件必须全部剔除。
- 使用强套件白名单(推荐适配 TLS 1.2+ 和 TLS 1.3):
ssl_ciphers 'TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256'; - 显式禁用风险套件(增强兼容性兜底):
ssl_prefer_server_ciphers off;(让客户端优先选其最强支持项) - 避免使用模糊通配符如
ALL、!aNULL等,坚持最小化白名单原则
验证是否生效
改完配置不能只信 reload 成功,必须实测确认旧协议和弱套件已被切断。
- 检测协议支持情况:
nmap --script ssl-enum-ciphers -p 443 yourdomain.com
输出中不应出现SSLv3、TLSv1.0、TLSv1.1或含3DES、RC4、MD5的行 - 快速检查 Heartbleed 风险(需 OpenSSL 1.0.1–1.0.1f 版本才受影响):
openssl s_client -connect yourdomain.com:443 -tlsextdebug 2>/dev/null | grep "server extension"
若返回空且服务端 OpenSSL 已升级至 1.0.1g 或更高,则无需额外操作 - 用 SSL Labs 测试页 获取 A+ 评级参考,重点关注 “Handshake Simulation” 中老旧客户端是否被拒绝
不复杂但容易忽略:真正起效的不是加了什么,而是坚决删掉了什么。删掉 SSLv3、删掉 TLS 1.0、删掉 3DES,比堆砌一堆新参数更关键。


















