抓包原理探秘 10:三十年的攻防进化——从裸奔到 ECH 加密一切
大家好,我是毛衣哥。这是第一卷的完结篇。我们从 1994 年 SSL 第一次被发明,一直聊到 2026 年的 ECH——三十年,加密协议跟中间人打了一架又一架。请坐稳,这场猫鼠游戏的终局来了。
这是「抓包原理探秘」第一卷的完结篇。我们从前九篇的知识点里抽身出来,站在 2026 年的时间节点上,回看 HTTPS 和中间人这三十年互相升级的历程。
1994 年,Netscape 发布了 SSL 1.0。全世界第一次有了"给 HTTP 加密"的想法。
此后三十年,中间人和加密协议的设计者一直在玩一场猫鼠游戏:
攻击者发现一个可观测的信息 → 协议设计者把它加密 → 攻击者去找下一个可观测的信息 → 再加密 → 直到今天。
第一阶段:HTTP 裸奔时代(1991-1994)
可观测的信息:一切。全部明文。
在这个阶段,"中间人"甚至不是一个专业术语——你不需要做任何攻击,你只需要在网络路径上放一台监听设备,就能直接读到所有的 HTTP 请求和响应。
当时的互联网协议栈里没有"加密"这个概念。HTTP 被设计出来的时候,设计者的目标是"让全世界的研究机构分享文档"——没有人想到有一天人们会在上面用信用卡购物、发私信、查银行余额。
攻防状态:攻击者完胜。因为根本没有防守。
第二阶段:SSL 1.0/2.0/3.0 时代的尝试(1994-1999)
可观测的信息:域名(SNI 在 ClientHello 中明文出现从最开始就有)。
Netscape 发明了 SSL(Secure Sockets Layer)。
SSL 1.0 从未公开发布——因为被发现存在严重的漏洞。
SSL 2.0 于 1995 年发布——但很快被发现可以在握手过程中被降级。
SSL 3.0 于 1996 年发布——这才是第一个真正可用的加密协议。
这个阶段攻防的特点:
- 加密的是内容(HTTP 请求和响应)
- 但不加密握手过程——中间人可以看到证书、域名、密码套件列表
- 密码套件很弱(RC4、DES、3DES 等,今天来看全部可以破解)
SSL 3.0 的设计已经包含了 CA 证书的概念——从第一天起,HTTPS 就依赖于"受信任的第三方"来确认服务器身份。这个设计选择一直延续到了 2026 年。
第三阶段:TLS 1.0 标准化(1999-2006)
IETF 接管了 SSL 的标准化工作,改名为 TLS。
主要变化:
- 标准化了协议规范(RFC 2246)
- 增加了更多的密码套件
- 修复了 SSL 3.0 中的已知漏洞
这个阶段的中间人:
- 主要的攻击形式是"网络监听"——被动地记录流量,尝试破解弱密码套件
- CA 体系开始受到关注——VeriSign 等第一家 CA 开始商业化运营
- 大部分网站还没有使用 HTTPS,只在登录页面和支付页面启用
第四阶段:TLS 1.1 / 1.2 时代——加密基线大幅提升(2006-2018)
TLS 1.2 于 2008 年发布,一直用到 2018 年。
主要变化:
- AEAD(Authenticated Encryption with Associated Data)密码套件引入(GCM 模式)
- SHA-256 取代 SHA-1 成为默认哈希算法
- ECDHE 密钥交换开始普及(但 RSA 仍然是默认选项)
真正的攻防升级发生在这个阶段:
攻击方:
2009 年,Moxie Marlinspike 演示 SSL Strip —— 不需要证书的中间人攻击。
2011 年,BEAST 攻击 —— 针对 TLS 1.0 的 CBC 模式。
2014 年,Heartbleed —— OpenSSL 的心脏出血漏洞,可以读出服务器内存中的私钥。
防御方:
2012 年,HSTS 正式成为 RFC 标准 —— 强制 HTTPS。
2015 年,Google 推动 Certificate Transparency —— 公开日志化证书。
2015 年,SSL 3.0 被正式弃用(POODLE 攻击后)。
攻防特点:中间人学会了专门攻击"弱密码套件"和"不正确的实现"。防御方开始淘汰弱算法、引入更严格的检查。
第五阶段:TLS 1.3——加密几乎一切(2018-2022)
主要变化:
- 握手从 2-RTT 降到 1-RTT(0-RTT 可选)
- 移除 RSA 密钥交换(Forward Secrecy 强制)
- 加密更多握手消息(Certificate 不再明文)
- 移除弱密码套件(37 种砍到 5 种)
- 引入降级保护
攻防状态:中间人的处境变难了。
- Certificate 加密了,中间人不能直接读取证书信息
- 强制 Forward Secrecy,中间人无法事后解密抓包记录
- 密码套件选择少了,攻击面小了
但中间人仍然能看到:
- SNI(明文域名)
- ClientHello 中的所有扩展列表
- IP 地址(必须的)
被加密的信息越来越多,可观测的信息越来越少。
第六阶段:ECH / DoH / 全链路加密(2022-至今)
这个阶段被称为"加密一切"阶段。
ECH(Encrypted Client Hello,以前叫 ESNI):
这是目前 HTTPS 加密的"最后一公里"。SNI 是 ClientHello 中最后一块还未加密的信息。ECH 要把这块也加密了。
ECH 的原理:
- 服务器在 DNS 记录中发布自己的公钥(通过 HTTPS DNS 记录)
- 客户端用这个公钥加密 SNI
- 服务器用自己的私钥解密 SNI
- 中间人看不到你访问的域名,只能看到 IP 地址
ECH 的部署现状(2026 年):
- Chrome 和 Firefox 已经支持
- Cloudflare 已经默认启用
- 但 ECH 仍然需要 CDN 和浏览器的配合,全球部署还在进行中
DoH(DNS-over-HTTPS):
DNS 查询本身也是明文的。中间人通过观察 DNS 查询,也能知道你访问了哪些网站。
DoH 把 DNS 查询包装在 HTTPS 请求中,加密传输。
传统 DNS:你 → 明文 DNS 查询 → 运营商 DNS → 返回 IP(中间人能看到你查了什么) DoH:你 → 加密的 HTTPS 请求 → DNS 服务器 → 返回 IP(中间人看到是 HTTPS 加密流量,不知道具体查了什么)这条加密进化的主线是什么?
回头看这三十年的进化,你会发现一条非常清晰的主线:
每一层信息被攻击者利用 → 协议设计者把这一层加密 → 攻击者去利用下一层可观测的信息 → 再加密 → 直到所有层都被加密。
1994:内容加密(SSL) 2008:算法升级(TLS 1.2) 2015:证书加密(Certificate Transparency) 2018:更多握手消息加密(TLS 1.3) 2022:域名加密(ECH) 至今:DNS 查询加密(DoH)最终剩下什么?IP 地址。
IP 地址不能被加密——因为路由器需要它来把数据包送到目的地。所以中间人永远能知道"你跟哪个 IP 通信"。
但 Mixnet(混合网络)、Tor 和多跳中继已经在尝试解决这个问题——通过多重加密 + 中继节点,使观察者无法从 IP 地址推断出你在跟谁通信。
那中间人攻击会彻底失效吗?
不会。
中间人攻击分两种。我们说的 ECH、TLS 1.3、DoH 防的是第一种:无授权的、恶意的中间人。这种中间人不能在你的系统里安装 CA 证书、不能修改你的浏览器配置。
第二种中间人——用户授权的中间人(抓包工具),永远能工作。
原因很简单:你主动装了它的 CA,你主动配了它的代理。ECH 加密的 SNI 对 Charles 无效——因为 Charles 是在你配好代理之后拦截了 TLS 握手,它在跟服务器通信时自己发起了新的 ClientHello,它不需要看你的原始 SNI——因为 SNI 已经在代理层面被"替换"了。
所以:
- ECH 防的是运营商、国家防火墙、WiFi 上的攻击者
- ECH不防你主动安装的抓包工具
一个表格总结这三十年的旅程
年代 协议 中间人能看到的 防御方做了什么 ───── ───────── ────────────────────────────── ───────────────── 1991-94 HTTP 全部内容(请求、响应、密码) 没有任何防御 1994-99 SSL 2/3 域名 + 证书内容 + 少量弱加密数据 开始加密传输内容 2006-08 TLS 1.0/1.1 域名 + 证书 + 弱套件 + 加密数据(可破) 淘汰最弱算法 2008-18 TLS 1.2 域名 + 证书 + 强加密数据(不可破) HSTS/CT引入 2018-22 TLS 1.3 域名(明文SNI)+ 加密的证书和数据 加密握手消息 2022-26 TLS 1.3+ECH (未来)只有IP地址 加密SNI你可能会问:如果我们把 IP 地址也加密了,互联网还能工作吗?
答案是:不能。如果你连 IP 地址都藏起来了,路由器就不知道怎么转发数据了。所以 IP 地址是最后一个"明文层"——它暴露了你跟哪个服务器通信,但你跟服务器之间说了什么,是完全加密的。
所以中间人攻击的最终形态,不是"什么都看不到了",而是"能看到你跟谁说话,但不知道你们说了什么"。
对于大多数用户来说,"不知道说了什么"就已经足够安全了。
第一卷小结
十期,近五万字。我们从 HTTP 裸奔讲到了 ECH。
第二卷我们将进入另一个完全不同的世界——抓包工具的底层原理。tcpdump 是怎么不配代理不装证书也能看到网络流量的?BPF 虚拟机到底是什么?eBPF 和 XDP 怎么在网卡驱动层面就给你把包处理了?
准备好了吗?我们下周见。
DumpAny 怎么做:站在 DumpAny 的产品视角看这三十年的攻防——一个好的抓包工具,需要在协议设计者和攻击者的博弈中找到平衡。既要支持最新的加密特性(TLS 1.3、ECH),让开发者在最新环境中调试;又要向前兼容,让用户能调试那些还在用 TLS 1.0 的遗留系统。这也是 DumpAny 选择模块化协议引擎的原因——每个协议独立实现、独立升级。
「抓包原理探秘」第一卷 · 完
🎬交互演示:文章中的 SSL Strip、ECH/ESNI 等攻防手段,在 SSL Strip Attack 动画 里有时序演示——攻击者、受害者、服务器三方互动,HSTS 如何反杀。
💬 聊几句:
- TLS 握手七步中,你觉得最关键的是哪一步?为什么?
- 你平时会去看 TLS 握手的细节吗?还是在用工具一键搞定?
- 如果有一天互联网的 CA 体系崩塌了,你觉得会发生什么?
- 你有没有遇到过证书相关的线上问题?怎么排查的?
上面聊的这些,在 DumpAny 里基本都帮你封装好了。装个证书、开个代理,直接看请求明文——不用手动处理 TLS 握手、不用自己写协议解析器。官网 dumpany.com,开源免费。