1. TLS 协议概述与历史
说到网络安全,TLS 协议是绕不开的一个话题。我个人习惯把它看作是互联网通信的“安全腰带”——有了它,你的数据在传输过程中不会被人偷看,也不会被人篡改。说白了,没有 TLS,你在网上购物、登录银行、发邮件,基本上就是裸奔。
这节课,咱们就从头梳理一下 TLS 的发展脉络。为什么要讲历史?你想想看,一个协议从诞生到现在经历了这么多版本迭代,每次升级背后其实都是血泪教训。我在做安全审计时,经常看到一些老系统还在用百年前的版本——嗯,相当于你家大门还在用纸糊的锁。
1.1 从 SSL 到 TLS:一个不得不说的故事
TLS 的前身是 SSL(Secure Sockets Layer),由网景公司开发。最早的 SSL 1.0 从未公开发布过,因为安全问题实在太严重。我记得有个老前辈跟我说过,当时内部测试直接就毙掉了。
| 版本 | 发布年份 | 关键变化 | 安全状态 |
|---|---|---|---|
| SSL 1.0 | 1994(未公开) | 内部原型,从未发布 | 高危漏洞 |
| SSL 2.0 | 1995 | 首次公开发布,支持简单加密 | 已废弃,不安全 |
| SSL 3.0 | 1996 | 引入 HMAC,修复大量漏洞 | 已废弃,存在 POODLE 攻击 |
| TLS 1.0 | 1999 | 基于 SSL 3.0,改名为 TLS | 已废弃,安全性不足 |
| TLS 1.1 | 2006 | 防御 CBC 攻击,引入隐式 IV | 已废弃,建议禁用 |
| TLS 1.2 | 2008 | 支持 AEAD 加密,SHA-256 | 广泛使用,推荐 |
| TLS 1.3 | 2018 | 简化握手,移除不安全算法 | 最新标准,强烈推荐 |
1.2 TLS 协议到底在保护什么?
用一个场景来理解。你在咖啡店连上公共 WiFi,输入密码登录网银。如果没有 TLS,中间的任何人都可以看到你的密码、银行卡号。TLS 提供了三个核心保护:
- 加密(机密性):数据在传输过程中是密文,别人看不懂
- 完整性校验:数据有没有被篡改,一验就知道
- 身份认证:你确实在和真正的银行服务器对话
但是,这三个保护并不是万能的。中间人攻击(MITM)就是专门针对这些保护机制的绕过方式。我们这门课从头到尾都在聊这个——如何检测、如何审计。
1.3 TLS 协议栈结构
TLS 协议分为两层:上层是握手协议(Handshake Protocol),下层是记录协议(Record Protocol)。我画了个图,方便你理解这两层的关系:
你看这个分层结构,它其实挺像我们日常的邮件沟通:上层决定写什么内容,下层负责打包寄出去。握手协议协商好了密钥和算法,记录协议就拿着这些参数把数据塞进去、加密、扔给 TCP 发出去。
1.4 握手流程概览(以 TLS 1.2 为例)
握手流程是整个 TLS 协议里最影响性能和安全的部分。我来拆解一下全握手的过程:
- ClientHello:客户端告诉服务器,我支持哪些 TLS 版本、密码套件、随机数
- ServerHello:服务器从客户端提供的列表里挑一个版本和套件,发回自己的随机数
- Certificate:服务器发送自己的证书链,让客户端验证身份
- ServerKeyExchange:如果使用的密钥交换算法需要,服务器发额外参数
- ClientKeyExchange:客户端生成预主密钥,用服务器的公钥加密后发过去
- Change Cipher Spec:双方切换加密模式,此后所有消息都是加密的
- Finished:发送握手消息的校验值,确认握手没有被篡改
1.5 为什么安全审计要关注 TLS?
咱们这门课叫《TLS 中间人攻击审计检测案例》,你可能会想:我直接上 TLS 1.3 不就行了?
没那么简单。就算用了最新的协议,配置错误、证书管理不当、弱密码套件残留,都可能给攻击者留后门。我遇到过最典型的一个案例:某金融 APP 虽然用了 TLS 1.2,但证书固定(Certificate Pinning)没做好,攻击者挂个假证书就能把流量全部劫走。
另外,TLS 中间人攻击的检测方法因人而异。有人看证书,有人看延迟,有人抓包分析。咱们后面的章节会逐个拆解这些检测技术,从原理到实战。