版本演进与弃用
从 SSL 2.0 到 TLS 1.3 的演进中,多个版本因设计缺陷被淘汰:SSL 2.0 与 3.0 因协议缺陷与 POODLE 攻击被完全废弃,TLS 1.0 与 1.1 于 2021 年被 RFC 8996 正式弃用,主流浏览器早已不再支持。当前合理区间是只启用 TLS 1.2 与 TLS 1.3。
基本信息
| SSL 2.0 / 3.0 | 1995 / 1996 年发布,已废弃,必须完全禁用 |
|---|---|
| TLS 1.0 | 1999 年发布,RFC 8996 弃用,浏览器已不支持 |
| TLS 1.1 | 2006 年发布,RFC 8996 弃用 |
| TLS 1.2 | 2008 年发布,仍在使用但必须禁用弱算法 |
| TLS 1.3 | 2018 年发布,推荐版本,1-RTT 与 AEAD |
| 当前合理配置 | 只启用 TLSv1.2 与 TLSv1.3 |
版本时间线
| 版本 | 发布 | 现状 |
|---|---|---|
| SSL 2.0 / 3.0 | 1995 / 1996 | 已废弃(POODLE 等问题),应完全禁用 |
| TLS 1.0 | 1999 | RFC 8996 弃用,主流浏览器不支持 |
| TLS 1.1 | 1999 之后(2006 定稿) | RFC 8996 弃用 |
| TLS 1.2 | 2008 | 仍在使用,需禁用 CBC、静态 RSA 与 SHA-1 |
| TLS 1.3 | 2018 | 推荐,1-RTT 握手与强制 AEAD |
验证服务端是否仍接受旧版本
验证服务端是否仍接受旧版本
# 逐版本尝试握手:若仍能协商成功说明旧版本未关闭
openssl s_client -connect example.com:443 -tls1 </dev/null 2>&1 | grep -E 'Protocol|alert|error'
openssl s_client -connect example.com:443 -tls1_1 </dev/null 2>&1 | grep -E 'Protocol|alert|error'
openssl s_client -connect example.com:443 -tls1_2 </dev/null 2>&1 | grep -E 'Protocol|Cipher'
# 外部视角复核:扫描工具会同时检查协议版本与套件
# 服务端侧确认实际生效配置
nginx -T 2>/dev/null | grep -E 'ssl_protocols|ssl_ciphers'弃用与过渡要点
- 关闭顺序:先关 SSLv3 与 SSLv2,再关 1.0 与 1.1,每一步都观察客户端失败率
- 保留下限:TLS 1.2 作为临时下限,等客户端普查完成再评估是否能只用 1.3
- 同步检查外围设备:负载均衡、CDN 与 WAF 上的版本配置常被遗漏
- 检查监控与 SDK:老客户端静默失败往往先体现在业务指标而非告警
- 设定退场时间表:兼容策略要有明确截止日期,避免临时方案长期存在
- 证书与套件同步整改:版本收紧后弱套件与 SHA-1 证书仍需单独清理
版本号与记录层实现并不总是一一对应:TLS 1.3 为了保证中间设备兼容,记录层版本号仍写 0x0303,真正的版本靠 supported_versions 扩展协商。因此抓包时不能只看记录层的版本字段判断实际版本。
弃用旧版本是外部可见的行为变更:老客户端会直接无法连接。变更前统计客户端分布、准备回滚预案,并在低峰期分批执行,避免一次性收紧造成大面积访问失败。