SSL调优核心是精准排序强套件而非堆砌算法,需按ECDSA/RSA证书分层配置,强制服务端优选、限定TLSv1.2+协议、指定高效椭圆曲线,并通过OpenSSL和SSL Labs实测验证PFS与AEAD套件生效。

调优 ssl_ciphers 不是拼凑高分算法,而是以客户端实际协商行为为终点,通过精准排序、协议约束和密钥交换协同,让强套件真正被选中。关键不在“列得多”,而在“排得准、压得住、配得齐”。
明确现代强套件的组成逻辑
每个套件如 ECDHE-RSA-AES128-GCM-SHA256 包含四层含义:
-
密钥交换:必须是
ECDHE或DHE,确保前向保密(PFS);RSA密钥交换已淘汰,不可用 -
身份认证:取决于证书类型——
RSA证书匹配ECDHE-RSA-*,ECDSA证书匹配ECDHE-ECDSA-* -
对称加密:仅限
AES128-GCM、AES256-GCM、CHACHA20-POLY1305;彻底禁用CBC模式(如AES256-SHA)、RC4、3DES、DES -
摘要算法:必须为
SHA256或SHA384;SHA1和MD5全面禁用(签名阶段 SHA1 可接受,但套件中不可出现)
按场景分层配置 ssl_ciphers 排序
顺序即协商优先级,Nginx 从左到右逐个尝试,第一个匹配且客户端支持的即生效。推荐分三段排列:
-
首选段(ECDSA 证书优先):适用于部署了 ECDSA 证书的站点,性能更优
ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305 -
主力段(RSA 证书通用):覆盖绝大多数客户端,兼顾安全与兼容
ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305 -
兜底段(仅限必要旧环境):如需兼容 IE11(Win7)、Android 5–6 或 Java 7/8,加在末尾,不干扰主流程
:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384(注意开头冒号)
⚠️ 切勿混用 !RC4:!MD5 等过滤语法——它无法覆盖前面已列出的弱套件,应从源头只选可信项。
必须配套的三项核心指令
ssl_ciphers 单独存在等于无效,以下三项必须同步启用:
-
强制服务端优选:
ssl_prefer_server_ciphers on;—— 否则客户端可无视你的排序,自行降级选择弱套件(TLS 1.2 下尤为关键) -
限定协议基线:
ssl_protocols TLSv1.2 TLSv1.3;—— 明确禁用 TLSv1.0/TLSv1.1(PCI-DSS、等保三级强制要求),避免其绕过 AEAD 强制使用 CBC -
指定高效椭圆曲线:
ssl_ecdh_curve secp384r1:prime256v1;—— 提升 ECDHE 计算效率,secp384r1 更快更抗侧信道,prime256v1 保障老旧 Android/嵌入式设备兼容
验证是否真按预期生效
重载 Nginx 后,不能只依赖 nginx -t。必须实测确认协商结果:
- 用 OpenSSL 快速验证 TLS 1.2 握手:
openssl s_client -connect yourdomain.com:443 -tls1_2 2>/dev/null | grep "Cipher is"
输出应为列表中最靠前的强套件(如ECDHE-RSA-AES128-GCM-SHA256) - 用 SSL Labs Server Test 查看 “Handshake Simulation” 表格,确认 Chrome/Firefox/Safari/Edge 最新版均协商到 GCM 或 ChaCha20 套件,且 “Key Exchange” 栏显示 PFS
- 若启用双证书(RSA + ECDSA),需分别测试不同客户端:支持 ECDSA 的现代浏览器应落到 ECDSA 套件,旧客户端自然回落 RSA 套件,无错配或降级











