第1章:TLS/SSL协议概述与发展历史
1.1 什么是TLS/SSL?
TLS(传输层安全协议)和它的前身SSL(安全套接层),说白了就是在网络上给数据“加个锁”。你想想看,HTTP是明文传输的,就像在大街上喊话,谁都能听见。而TLS/SSL就是在TCP之上加了一层加密包装,确保数据在传输过程中不被偷看、不被篡改。
我个人习惯把TLS看作一个“安全隧道”。客户端和服务端先在这条隧道里协商好密钥,然后用这个密钥加密后续所有通信。这个握手过程,就是我们这门课的核心。
核心概念速记
- 认证:确认对方身份(通常通过数字证书)
- 机密性:数据只有收发双方能读懂
- 完整性:防止数据在传输中被篡改
1.2 发展历史:从SSL到TLS 1.3
我把这段历史简化成了下面的时间线图,这样看起来更直观。
我最早接触TLS是在2009年,那时候TLS 1.2刚发布不久。公司有个金融项目要求使用安全的WebSocket,我第一次配服务器证书时手忙脚乱,连自签名证书和CA证书都没分清——嗯,后来被安全审计打回来重做,记忆犹新。
1.3 各版本的关键差异
为什么会有这么多版本?说白了就是安全漏洞倒逼升级。我整理了一个对比表,方便你快速了解。
| 版本 | 发布时间 | 核心问题 | 里程碑变化 |
|---|---|---|---|
| SSL 2.0 | 1995 | 无法防止中间人攻击,使用MD5 | 第一个商用版本 |
| SSL 3.0 | 1996 | 存在降级攻击风险(如POODLE) | 引入协商机制、HMac |
| TLS 1.0 | 1999 | 对SSL 3.0的小改,仍存漏洞 | 更名为TLS,改PRF算法 |
| TLS 1.1 | 2006 | 对CBC模式攻击的防御较弱 | 增加显式IV,防CBC预测 |
| TLS 1.2 | 2008 | 仍支持不安全算法(RC4、CBC) | 引入GCM/CCM认证加密,SHA-256 |
| TLS 1.3 | 2018 | ——(本课程主角) | 握手仅1-RTT(0-RTT复用),移除所有不安全算法 |
注意:SSL 2.0和3.0早已被IETF明确禁止使用。我在2014年接手过一个老旧系统,还在用SSL 3.0,当时POODLE漏洞爆发,紧急升级到TLS 1.2。你如果遇到只支持SSL的SDK,建议直接拒绝。
1.4 为什么TLS 1.3是一次质的飞跃?
你可能觉得版本号从1.2到1.3只是小升级,但实际改动非常大。我把最重要的几个点拎出来说说。
握手延迟大幅降低
传统TLS 1.2完全握手需要2个往返(2-RTT),再加上TCP的1个RTT,建立连接至少要3个RTT。而TLS 1.3把握手压缩到1个RTT(完整握手),如果使用0-RTT模式甚至能一次发包就完成——这对移动端和低延迟场景太关键了。
移除了大量不安全密码套件
TLS 1.3只保留了5种认证加密套件(AEAD),像RSA密钥交换、CBC模式、RC4、3DES这些全砍掉了。我在项目中遇到过客户坚持要用RSA密钥交换做兼容,但我解释说TLS 1.3根本不支持,必须改用ECDHE——说白了,这是用安全性换来的简洁。
强制使用前向安全
以前RSA密钥交换如果私钥泄露,之前所有会话都能被解密。TLS 1.3强制使用ECDHE或DHE,每次会话独立生成临时密钥,即使服务器私钥泄露也只能影响未来会话,历史数据安全。
一点个人经验:我在给某电商平台做SDK适配时,发现它们还在用TLS 1.2,原因是旧版OpenSSL不支持TLS 1.3。后来我把OpenSSL升级到1.1.1,顺手改了几行握手回调代码,整个页面加载快了200毫秒——用户体验提升很明显。
1.5 本章小结
TLS/SSL从1995年走到今天,核心目标一直没变:给互联网通信一个安全通道。但实现方式一直在迭代。TLS 1.3是最新、最安全的版本,也是我们这门SDK适配课程的基础。