TLS 1.2 是什么
TLS 1.2 发布于 2008 年(RFC 5246),是当前存量系统里使用最广的版本:支持 RSA 密钥传输、DHE 与 ECDHE 密钥交换,加密可用 AES-GCM、ChaCha20-Poly1305 与 CBC,并带会话恢复与重协商机制。它的灵活性也带来风险:配置不当就会协商到 CBC、静态 RSA 甚至 SHA-1,所以配置重点是明确排除弱算法。
基本信息
| 标准 | RFC 5246(2008) |
|---|---|
| 握手 | 完整握手 2-RTT,会话恢复 1-RTT |
| 密钥交换 | RSA(无前向保密)、DHE、ECDHE(推荐) |
| 加密算法 | AES-GCM、ChaCha20-Poly1305 推荐;CBC 尽量避免;3DES/RC4 禁用 |
| 常见扩展 | SNI、ALPN、会话票据、OCSP Stapling、Encrypt-then-MAC |
| 配置入口 | ssl_protocols 与 ssl_ciphers(受系统 OpenSSL 版本影响) |
| 现状 | 仍在使用,需与 TLS 1.3 并存并禁用弱算法 |
典型使用场景
- 兼容老客户端:老款安卓、早期 Java 运行时与部分 IoT 设备只支持 1.2
- 存量系统过渡:新版本已支持 1.3,但客户端普查未完成前需保留 1.2
- 内网设备对接:部分网络设备与打印机仅支持 1.2
- 合规扫描整改:在保留 1.2 的前提下把 CBC、静态 RSA 与 SHA-1 排除
- 故障对照排查:新版本协商异常时用 1.2 验证证书与套件配置本身是否正确
限制版本与套件
限制版本与套件
# 只启用 1.2 与 1.3,旧版本一律关闭
ssl_protocols TLSv1.2 TLSv1.3;
# 只保留 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;
# 验证协商结果与临时密钥类型(有 Server Temp Key 说明具备前向保密)
openssl s_client -connect example.com:443 -tls1_2 </dev/null 2>&1 | grep -E 'Protocol|Cipher|Server Temp Key'套件取舍
| 组合 | 前向保密 | 建议 |
|---|---|---|
| ECDHE + AES-GCM 或 ChaCha20-Poly1305 | 有 | 首选,兼顾性能与安全 |
| ECDHE + CBC | 有 | 尽量避免,需额外的完整性保护 |
| RSA 密钥传输 + AEAD | 无 | 禁用,长期私钥泄漏可解密历史流量 |
| DHE(非 ECC) | 有 | 参数弱时风险高,优先 ECDHE |
| RC4 / 3DES / EXPORT / NULL | 无 | 必须禁用 |
TLS 1.2 允许大量弱组合,只要不禁用,客户端就可能协商到它们:CBC 会带来填充与时间侧信道问题,静态 RSA 没有前向保密,SHA-1 早已不适合签名。整改后务必用 s_client 或扫描工具看实际协商结果,而不是只看配置文本。
关闭 TLS 1.0/1.1 前先做客户端普查:老客户端无法访问属于可用性事故。可行做法是保留 1.2 作为下限、按来源或 UA 分流,同时设定明确的退场时间表,并在灰度期间监控访问失败率。