TLS 1.2 套件怎么选
TLS 1.2 的可用套件数量庞大,配置原则可归纳为三点:密钥交换优先 ECDHE(提供前向保密)、加密模式优先 AEAD(GCM 或 ChaCha20-Poly1305)、哈希使用 SHA-256 及以上。同时明确禁用 RC4、3DES、EXPORT、匿名套件与静态 RSA,并确认套件与证书类型匹配。
基本信息
| 推荐列表 | ECDHE-ECDSA 或 ECDHE-RSA 搭配 AES-GCM 与 ChaCha20-Poly1305 |
|---|---|
| 禁用项 | RC4、3DES、DES、EXPORT、aNULL、静态 RSA(条件允许时) |
| 顺序控制 | ssl_prefer_server_ciphers 决定是否按服务端偏好排序 |
| 证书匹配 | ECDSA 套件需 ECDSA 证书,RSA 套件需 RSA 证书 |
| 验证方式 | openssl ciphers -v 与 s_client 实际协商结果 |
| 遗留风险 | CBC 类套件涉及填充与时间侧信道历史问题 |
典型使用场景
- 新站点上线:直接采用 ECDHE + AEAD 白名单,避免默认宽松配置
- 合规扫描整改:按扫描报告的套件清单逐项收敛
- 老客户端兼容:在保留可用性的前提下优先剔除最弱组合
- 证书类型调整:从 RSA 证书迁移到 ECDSA 证书时同步调整套件顺序
- 故障排查:握手失败时核对两端套件交集是否为空
nginx 配置片段
nginx 配置片段
# 只保留 ECDHE 与 AEAD 组合,去掉 CBC、3DES、静态 RSA
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305;
ssl_prefer_server_ciphers on;
# 验证:确认实际协商结果中没有 CBC
openssl s_client -connect example.com:443 -tls1_2 </dev/null 2>/dev/null | grep -E 'Cipher|Server Temp Key'
# 查看本机 OpenSSL 实际支持的可用套件,避免配置了不存在的名字
openssl ciphers -v 'ECDHE+AESGCM' | head -6组合取舍
| 组合 | 前向保密 | 建议 |
|---|---|---|
| ECDHE + AES-GCM | 有 | 首选,兼容性与性能均衡 |
| ECDHE + ChaCha20-Poly1305 | 有 | 无 AES 加速的客户端优先 |
| ECDHE + CBC | 有 | 尽量避免,缺少完整性保护 |
| RSA 密钥传输 + AEAD | 无 | 禁用,长期私钥泄漏可解密历史流量 |
| RC4 / 3DES / EXPORT / NULL | 无 | 必须禁用 |
套件列表里只要还留着 CBC,部分扫描工具就会报出 Lucky13 或历史填充类风险;同样,保留静态 RSA 套件会让前向保密形同虚设。收敛后务必用 s_client 或外部扫描复核实际协商结果,配置文本与生效结果经常不一致。
套件与证书必须匹配:只有 ECDSA 证书时把 ECDSA 套件写在前面是对的,但同时保留 RSA 套件也无害(客户端会按证书类型协商);反之若把不匹配的套件强排首位,部分客户端会直接握手失败。