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到TLS 1.0要改名?其实技术变化不大,主要是IETF接手后想摆脱「网景」的标签。但真正的大变革是TLS 1.3——它把握手从两次往返砍到一次,还砍掉了一堆过时算法。我建议新项目直接上TLS 1.3,别犹豫。
1.2 TLS在网络安全中的角色:不止是「加密」
很多人以为TLS就是加密。其实它干了三件事,缺一不可:
- 机密性:数据加密,中间人看不懂
- 完整性:数据不被篡改,改了能发现
- 身份认证:确认对方是「真身」不是冒牌货
你想想看,如果只有加密没有认证,那中间人完全可以跟你建立加密通道,然后他再跟服务器建立另一个加密通道——你俩都在加密,但中间人全看得见。这就是经典的中间人攻击。
在实际项目中,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上,只要配置对也能用,只是不标准。
1.4 知识体系总览:一张图看懂TLS
下面这张图展示了TLS协议在整个网络栈中的位置,以及它和HTTPS的关系。我画这张图时特意把「握手」放在中间——因为它是TLS最核心、也最复杂的部分。
从这张图能看出来,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已废弃,别再用