第1章:TLS/SSL协议概述与发展历史

1.1 什么是TLS/SSL?

TLS(传输层安全协议)和它的前身SSL(安全套接层),说白了就是在网络上给数据“加个锁”。你想想看,HTTP是明文传输的,就像在大街上喊话,谁都能听见。而TLS/SSL就是在TCP之上加了一层加密包装,确保数据在传输过程中不被偷看、不被篡改。

我个人习惯把TLS看作一个“安全隧道”。客户端和服务端先在这条隧道里协商好密钥,然后用这个密钥加密后续所有通信。这个握手过程,就是我们这门课的核心。

核心概念速记

  • 认证:确认对方身份(通常通过数字证书)
  • 机密性:数据只有收发双方能读懂
  • 完整性:防止数据在传输中被篡改

1.2 发展历史:从SSL到TLS 1.3

我把这段历史简化成了下面的时间线图,这样看起来更直观。

TLS/SSL版本演进时间线 SSL 1.0 1994 (内部) SSL 2.0 1995 SSL 3.0 1996 TLS 1.0 1999 TLS 1.1 2006 TLS 1.2 2008 TLS 1.3 2018 关键变化 SSL 1.0从未公开 TLS 1.3握手仅需1-RTT 移除不安全算法

我最早接触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适配课程的基础。