1. TLS协议概述:从SSL到TLS,它到底保护了什么?

聊TLS握手之前,咱们得先搞清楚一件事:TLS到底是什么?

说白了,TLS就是给网络通信加了一把锁。你想想看,数据在互联网上传输,就像明信片一样——沿途每个节点都能看到内容。没有TLS,你的密码、信用卡号、聊天记录,全裸奔。

我个人习惯把TLS比作「数字信封」。发信前先把信装进信封,封好口,写上只有收件人能打开的密码。中途有人截了,也只能看到个信封,拆不开。

1.1 SSL/TLS发展简史:一个关于「补丁」的故事

TLS不是一天建成的。它的前身是SSL,由网景公司在90年代推出。我刚开始做安全那会儿,还在用SSL 3.0,现在想想真是后怕。

版本 发布年份 关键变化 安全状态
SSL 1.0 1994(未公开) 内部版本,从未发布 已废弃
SSL 2.0 1995 第一个公开版本,但漏洞太多 已废弃(2011年)
SSL 3.0 1996 大幅改进,引入主密钥概念 已废弃(2015年,POODLE攻击)
TLS 1.0 1999 IETF接手,改名TLS,与SSL 3.0差异不大 已废弃(2021年)
TLS 1.1 2006 防CBC攻击,增加IV保护 已废弃(2021年)
TLS 1.2 2008 引入AEAD、SHA-256,可扩展密码套件 当前主流(推荐)
TLS 1.3 2018 握手从2-RTT降到1-RTT,移除不安全算法 最新标准(强烈推荐)
⚠️ 避坑提醒: 我曾经在审计一个老系统时,发现它还在用SSL 3.0。客户说「一直没出过问题」。结果我用POODLE攻击测试,不到10秒就拿到了会话Cookie。嗯,从那以后我养成了一个习惯——上线前必扫协议版本。

为什么SSL 3.0到TLS 1.0要改名?其实技术变化不大,主要是IETF接手后想摆脱「网景」的标签。但真正的大变革是TLS 1.3——它把握手从两次往返砍到一次,还砍掉了一堆过时算法。我建议新项目直接上TLS 1.3,别犹豫。

1.2 TLS在网络安全中的角色:不止是「加密」

很多人以为TLS就是加密。其实它干了三件事,缺一不可:

  • 机密性:数据加密,中间人看不懂
  • 完整性:数据不被篡改,改了能发现
  • 身份认证:确认对方是「真身」不是冒牌货

你想想看,如果只有加密没有认证,那中间人完全可以跟你建立加密通道,然后他再跟服务器建立另一个加密通道——你俩都在加密,但中间人全看得见。这就是经典的中间人攻击。

🔑 核心认知: TLS的认证机制依赖数字证书和PKI体系。服务器向CA申请证书,客户端验证证书链。我见过不少开发者在自建CA时把根证书配错了,结果客户端一直报证书错误——排查了半天才发现是证书链不完整。

在实际项目中,TLS还承担了另一个角色:合规。很多行业标准(如PCI DSS、GDPR)明确要求数据传输必须加密。我有个客户做金融支付,审计时被问到「你们TLS版本是多少?」答不上来直接扣分。

1.3 HTTPS与TLS的关系:别搞混了

这个问题我面试时经常问。很多人说「HTTPS就是加了TLS的HTTP」。对,但不全对。

准确地说:HTTPS = HTTP over TLS。TLS是底层传输层安全协议,HTTP是应用层协议。TLS不关心你传的是HTTP还是FTP还是SMTP——它只负责把数据安全地送过去。

举个例子:

// 没有TLS的HTTP
客户端 ————明文HTTP请求————→ 服务器
客户端 ←———明文HTTP响应———— 服务器

// 有TLS的HTTPS
客户端 ————TLS握手建立安全通道————→ 服务器
客户端 ————加密的HTTP请求————→ 服务器
客户端 ←———加密的HTTP响应———— 服务器

HTTPS默认端口是443,HTTP是80。但这不是硬性规定——我见过有人把HTTPS跑在8080上,只要配置对也能用,只是不标准。

💡 小技巧: 抓包时判断是HTTP还是HTTPS很简单:看第一个包。如果是明文"GET / HTTP/1.1"就是HTTP;如果是二进制乱码(TLS ClientHello),那就是HTTPS。我经常用这个快速定位问题。

1.4 知识体系总览:一张图看懂TLS

下面这张图展示了TLS协议在整个网络栈中的位置,以及它和HTTPS的关系。我画这张图时特意把「握手」放在中间——因为它是TLS最核心、也最复杂的部分。

TLS协议知识体系总览 应用层:HTTP / FTP / SMTP HTTPS = HTTP over TLS 安全层:TLS协议 握手协议 | 记录协议 | 警报协议 传输层:TCP 可靠连接,端口443(HTTPS默认) 网络层:IP 路由与寻址 TLS三大核心功能 🔒 机密性:加密数据 ✅ 完整性:防篡改 🆔 身份认证:防冒充 TLS握手核心步骤 1. ClientHello 2. ServerHello + 证书 3. 密钥交换 4. Finished 常见TLS版本 ✅ TLS 1.2(主流) ✅ TLS 1.3(推荐) ❌ SSL 3.0 / TLS 1.0 ❌ TLS 1.1 本课程重点:TLS握手协议(第2-15章) + 抓包分析(第16-25章) + 实战案例(第26-30章)

从这张图能看出来,TLS夹在应用层和传输层之间。它不替代TCP,也不替代HTTP——它给它们加了一层「安全壳」。

我个人觉得,理解TLS最好的方式就是抓包。光看理论永远隔着一层。后面章节我们会用Wireshark一步步拆解握手过程,到时候你就能亲眼看到ClientHello、ServerHello、证书、密钥交换这些包长什么样了。

📌 本章要点:
  • TLS = 机密性 + 完整性 + 身份认证,缺一不可
  • HTTPS = HTTP over TLS,不是独立协议
  • TLS 1.2是当前主流,TLS 1.3是未来方向
  • SSL 2.0/3.0、TLS 1.0/1.1已废弃,别再用