1. TLS协议概述与演进(1.0/1.1/1.2/1.3)

各位好,我们直接进入正题。TLS,全称是传输层安全协议。说白了,它就是给网络通信加了一把锁。

在开始讲TLS 1.2下线之前,我们得先搞清楚:TLS这兄弟几个,到底有什么区别?为什么1.2必须下线?1.3又强在哪?

我个人习惯把TLS的演进史分为四个阶段。每个版本都解决了一些老问题,也带来了新麻烦。今天我们就把这四兄弟挨个盘一遍。

TLS协议版本演进与核心差异图 TLS协议演进:从SSL到TLS 1.3 SSL 3.0 已废弃(POODLE) TLS 1.0 1999 / 禁止使用 TLS 1.1 2006 / 禁止使用 TLS 1.2 2008 · 当前主力 SHA256 + AEAD支持 TLS 1.3 2018 · 未来 0-RTT + 前向安全 核心演进方向: 1. 加密算法:RC4/MD5/SHA1 → AES-GCM/SHA256/SHA384 2. 握手延迟:2-RTT(TLS 1.2)→ 1-RTT/0-RTT(TLS 1.3) 3. 前向安全:可选(1.2)→ 强制(1.3) 4. 密码套件:废弃不安全组合,强制AEAD加密

1.1 从SSL到TLS:标准的诞生

先说点历史背景。TLS的前身是SSL,网景公司搞出来的。SSL 3.0在1996年发布,后来IETF(互联网工程任务组)把它标准化成了TLS 1.0(1999年)。

有意思的是:TLS 1.0其实只比SSL 3.0改了一点点,所以很多时候他们还能互通。但安全这东西,差一点就是天壤之别。

⚠️ 注意:SSL 3.0 和 TLS 1.0 都已被官方禁止使用。
原因很简单:他们用的加密算法太老了,比如RC4、CBC模式加密,现在破解起来跟玩一样。

1.2 TLS 1.0:问题最多的老大哥

  • 发布时间:1999年(RFC 2246)
  • 核心问题:支持CBC模式加密,存在BEAST攻击(2011年曝光)
  • 密码套件:依赖RC4、3DES、IDEA等老算法
  • 当前状态:主流浏览器和OS已默认禁用

我早期做安全审计时,遇到过不少遗留系统还在跑TLS 1.0。你想想看,一个1999年的协议,面对2024年的攻击者,基本就是裸奔。我建议手里还有老系统的朋友,尽快把1.0和1.1都禁掉。

1.3 TLS 1.1:过渡的尴尬品

  • 发布时间:2006年(RFC 4346)
  • 主要改进:引入隐式IV,防御CBC攻击
  • 致命弱点:还是没有AEAD加密支持
  • 当前状态:也已禁止使用

TLS 1.1在我眼里就是个“过渡品”。它修了一些洞,但没解决根本问题。到2018年,PCI DSS(支付卡行业数据安全标准)明确要求禁用1.0和1.1,基本判了它俩死刑。

1.4 TLS 1.2:我们的主角

终于轮到我们今天的主角了。TLS 1.2发布在2008年(RFC 5246),这是个分水岭。

  • 关键改进:引入SHA256作为默认哈希算法
  • 新增功能:支持AEAD(认证加密)模式,如AES-GCM
  • 灵活性:密码套件大幅扩展,支持ECDHE密钥交换
  • 当前状态:仍在使用,但安全基线已要求禁用弱套件

我个人认为,TLS 1.2是目前为止最成功的TLS版本——它撑了将近15年。但问题是,大家只用了它的“基础版”。很多服务器还在跑一些有问题的密码套件,比如用RSA密钥交换(无前向安全)、用CBC模式加密(有padding oracle攻击风险)。

💡 实用建议:虽然TLS 1.2本身是安全的,但你必须只启用强密码套件。我推荐做两件事:
✅ 关闭所有非AEAD的加密模式(如CBC)
✅ 关闭不使用ECDHE/DHE的密钥交换(如RSA、DH)
这样配置的1.2,才有资格叫“安全”。

1.5 TLS 1.3:新一代的王者

  • 发布时间:2018年(RFC 8446)
  • 革命性改变:握手从2-RTT缩短到1-RTT(甚至0-RTT)
  • 强制性安全:所有密码套件必须支持前向安全
  • 废弃的垃圾:直接砍掉了几十个有问题的密码套件

TLS 1.3最大的优点就是“干净”。它不允许你选择弱算法,只能用AEAD加密(AES-GCM或ChaCha20-Poly1305)。这带来的好处是——配置简单了,不容易出错。我建议新项目直接上1.3,不用犹豫。

1.6 核心演进对比表

版本 发布年份 加密强度 AEAD支持 前向安全 握手延迟 当前状态
SSL 3.0 1996 极低 否 否 2-RTT 已禁止
TLS 1.0 1999 低 否 否 2-RTT 已禁止
TLS 1.1 2006 中低 否 否 2-RTT 已禁止
TLS 1.2 2008 高(配置得当) 是(可选) 是(可选) 2-RTT 主力(即将下线)
TLS 1.3 2018 极高(强制) 是(强制) 是(强制) 1-RTT / 0-RTT 推荐使用

1.7 为什么必须下线TLS 1.2?

讲到这里,可能有人会问:“TLS 1.2不是还安全吗?为什么非得下?”

一句话回答:不是TLS 1.2本身有问题,而是它下面留了太多“后门”。

  • 弱套件泛滥:很多系统还在用RC4、CBC、3DES这些已经破解的算法
  • 缺乏强制前向安全:如果服务器私钥泄露,之前记录的所有加密通信都会被破解
  • 握手延迟高:2-RTT在大规模服务中会显著增加延迟
  • 攻击面大:支持的密码套件太多,每种都可能存在实现漏洞

我曾经帮一家金融公司做安全加固,发现他们虽然只开放了TLS 1.2,但密码套件列表里还躺着TLS_RSA_WITH_AES_128_CBC_SHA。这就是个定时炸弹。CBC模式在1.2里仍然可用,攻击者可以利用Padding Oracle攻击一步步把你的Cookie解密出来。

🔑 核心观点:TLS 1.2下线不是“它不能用了”,而是“我们已经有了更好的选择(TLS 1.3)”。
在安全领域,可用不等于安全,安全不等于最佳。主动下旧版,才能防患于未然。

1.8 我们的课程定位

这门课,就是要手把手教你把TLS 1.2安全地下线,同时平滑过渡到1.3。注意,是“安全下线”,不是粗暴关闭。我们还要保证老客户端(比如某些老旧手机、嵌入式设备)在不支持1.3的情况下,还能用1.2继续跑。这就是“双协议共存”要解决的问题。