1. TLS协议概述:发展历史、核心原理与重要性
TLS(传输层安全协议)是互联网安全的基石。每次你访问 HTTPS 网站、收发加密邮件、做在线支付,背后都有它保驾护航。但说实话,很多人对它的理解停在「用了就安全」的层面。这一章,我们来扒一扒 TLS 的底。
1.1 发展历史:从SSL到TLS 1.3
TLS 的前身是 SSL,出自 Netscape 公司。1994 年他们发了 SSL 1.0,但内部发现一堆问题,根本没公开。1995 年 SSL 2.0 面世,虽然商用,但安全缺陷很明显——我早期做安全审计时翻过它的规范,那叫一个糙。
真正的转折在 1996 年。SSL 3.0 引入了 HMAC 和完整握手流程,奠定了现代 TLS 的基础。1999 年 IETF 接手,改名为 TLS 1.0,本质上就是 SSL 3.0 的小改版。之后 2006 年的 TLS 1.1 修了几个 CBC 漏洞,2008 年的 TLS 1.2 加入了 SHA-256 和 AEAD,成为服役最久的版本。
2018 年 TLS 1.3 发布,是一次大手术。握手从 2-RTT 降到 1-RTT,废掉了 RC4、3DES、CBC 等老旧算法,强制前向安全。我在项目中遇到过从 1.2 迁移到 1.3 的场景,配置变化很大,但性能提升肉眼可见。
下表列出了各版本的核心差异,方便你对照:
| 版本 | 发布年份 | 核心改进 | 当前状态 |
|---|---|---|---|
| SSL 1.0 | 1994 | 未公开发布 | 已废弃 |
| SSL 2.0 | 1995 | 首次商用,缺HMAC | 已废弃 |
| SSL 3.0 | 1996 | 引入HMAC,完整握手 | 已废弃(POODLE漏洞) |
| TLS 1.0 | 1999 | SSL 3.0 的 IETF 标准化 | 已废弃 |
| TLS 1.1 | 2006 | 防CBC攻击,改进IV | 已废弃 |
| TLS 1.2 | 2008 | SHA-256,AEAD,GCM | 广泛使用 |
| TLS 1.3 | 2018 | 1-RTT握手,前向安全必选 | 快速普及 |
1.2 核心原理:TLS 到底在保护什么?
TLS 不是单个协议,而是一组协议的组合。它工作在传输层之上、应用层之下。你想想看,每次 HTTPS 请求,底层其实跑了两次协议握手,协商出一堆参数,然后才开始传数据。
下面这张图展示了 TLS 的演进脉络和核心组件的关系。我建议你把它存下来,后面章节会反复提到这些概念。
四个组件各司其职,缺一不可。我拆开来讲:
- 握手协议 — 客户端和服务器第一次见面时,先商量用哪种密码套件、交换随机数、验证对方身份。说白了就是「确认过眼神,你是对的人」。
- 记录协议 — 握手完成后,真正的数据被切成片段,每个片段独立加密并附上 MAC 校验。防止中间人篡改或重排。
- 密码套件 — 一套算法的组合。比如 ECDHE + AES-256-GCM + SHA-384。我见过很多配置问题出在套件选择上,选错了要么不安全,要么性能崩。
- PKI 证书体系 — 解决「你怎么证明你是你」的问题。CA 签发证书,浏览器校验信任链。我曾经遇到证书链不完整导致 Android 端死活连不上的情况,排查了半天才发现中间证书没配。
1.3 为什么TLS对你很重要?
没有 TLS,互联网的通信就是裸奔。你发的每个 HTTP 请求,密码、支付信息、Cookie,都可以被中间人一览无余。这不是危言耸听。
从运维角度看,TLS 配置正确与否直接影响系统安全评级。等保 2.0、PCI-DSS 都明确要求使用 TLS 1.2+。我见过不少团队因为证书配置不当,导致线上服务出现间歇性握手失败——那种问题最难排查。