1. TLS 1.3 协议概述:发展历史、设计目标、与 TLS 1.2 的主要区别
1.1 为什么我们要重新聊 TLS?
说起 TLS,搞过网络安全的应该都不陌生。但说实话,TLS 1.2 在 2008 年定稿后,到 2018 年 TLS 1.3 正式发布,中间整整隔了十年。这十年里互联网发生了翻天覆地的变化——移动端爆发、物联网设备激增、HTTPS 几乎成了标配。我自己在 2016 年接手过一个支付网关项目,当时还在用 TLS 1.2,结果安全审计直接亮了红灯:弱加密套件、协议降级攻击、握手延迟…嗯,从那以后我就开始密切跟踪 TLS 1.3 的进展了。
1.2 一段简短的发展史
其实 TLS 的前身是 Netscape 在 1994 年搞的 SSL。一路走下来,版本号从 SSL 2.0、SSL 3.0 跳到 TLS 1.0、1.1、1.2,再到 1.3。我习惯把这几个关键节点捋一捋:
| 版本 | 发布年份 | 核心变化 |
|---|---|---|
| SSL 3.0 | 1996 | 奠定加密通信基础,后来被 RFC 6101 定为历史标准 |
| TLS 1.0 | 1999 | 改名,修复部分安全漏洞 |
| TLS 1.1 | 2006 | 增强 CBC 保护,移除部分弱密码 |
| TLS 1.2 | 2008 | 引入 AEAD、SHA-256、GCM,加密套件可协商 |
| TLS 1.3 | 2018 | 精简握手、强制 PFS、移除不安全算法 |
我个人习惯:每次评估协议升级,先看它砍掉了什么。TLS 1.3 做的不是加法,而是减法。砍掉的东西往往比新增的更能说明问题。
1.3 设计目标:更快、更安全、更简洁
TLS 1.3 的设计目标其实很简单,就三个词:性能、安全、简洁。你想想看,之前的版本里有多少冗余协商和遗留算法?我记得 TLS 1.2 光 cipher suite 就有好几百个可选项,真正安全的没几个。
- 性能提升:将握手从 2-RTT 压缩到 1-RTT;支持 0-RTT 快速恢复。我在测试环境中实测过,首次连接延迟降低了 40%~60%。
- 安全加固:移除 RSA 密钥交换、强制前向安全性(PFS)、使用 AEAD 作为唯一加密模式。说白了,中间人就算拿到了私钥,过去会话也解不出来。
- 协议简洁:砍掉静态密码套件、压缩、重协商等历史包袱。整个 spec 从 TLS 1.2 的几百页瘦身到一百多页。
避坑指南:我曾经见过一个团队为了兼容老旧客户端,硬是把 TLS 1.2 的 RSA 交换模式保留下来,结果在一次渗透测试中被降级攻击拿下。换成 TLS 1.3 之后,这个问题就彻底消失了——因为协议本身就不给你留降级的空间。
1.4 与 TLS 1.2 的主要区别
下面这张表是我自己整理的核心差异,做选型和迁移时对照着看特别管用:
| 对比维度 | TLS 1.2 | TLS 1.3 |
|---|---|---|
| 握手延迟 | 2-RTT(全握手) | 1-RTT(全握手),0-RTT(快速恢复) |
| 加密套件 | 数十个,含不安全选项 | 仅限 5 个 AEAD 套件,全部强制 PFS |
| 密钥交换 | RSA / DH / ECDH | 仅 DHE / ECDHE |
| 证书验证 | 协商阶段包含 ServerCertificate | 加密后发送 ServerCertificate |
| Session 恢复 | Session ID / Session Ticket | PSK + 0-RTT |
| 协议版本 | 以 version 字段明确声明 | 使用 supported_versions 扩展,减少版本篡改风险 |
嗯,这里要注意:TLS 1.3 把 ServerCertificate 放到 EncryptedExtensions 之后发送,意味着中间人看不到服务器证书内容,隐私性大幅提升。但反过来,客户端必须等握手完成才能做证书检查,这对一些需要前置验证的场景是个挑战。
1.5 核心知识体系总览
为了让接下来的学习有个整体框架,我画了一张图。它把 TLS 1.3 的主要模块拆出来——握手流程、密码套件、密钥派生、安全属性以及兼容性策略。我们整个课程会按这个结构往下讲。
1.6 为什么你现在就应该关注 TLS 1.3?
我接触的一些团队还在纠结要不要从 1.2 迁移。说实话,如果你们的产品要过 PCI-DSS 或者等保 2.0,TLS 1.3 几乎是必选项。浏览器厂商多数已经在 2020 年左右默认启用 1.3,主流服务端库(OpenSSL 1.1.1+、BoringSSL、NSS)也都原生支持。你再不跟上,客户端体验和安全合规都会掉队。
不过有一点要提醒:0-RTT 有重放攻击风险。如果你的业务涉及幂等性要求低的请求(比如下单、转账),建议对 0-RTT 做额外防护,或者在服务端通过 anti-replay 机制限制。
好了,这一章先把 TLS 1.3 的全貌搭起来。后面我们会慢慢拆解握手细节、cipher suite 的定义、密钥派生的每一步运算。你现在脑子里的框架图,就是最好的导航。