TLS握手全解析:从1.2到1.3的加密演进
引言上一篇我们讲了 HTTPS 的加密原理——对称加密、非对称加密、混合加密和证书体系。但只知道用什么加密还不够还需要知道加密是怎么建立起来的。浏览器和服务器在传输任何数据之前要先完成一个打招呼的过程协商好加密方式、验证彼此身份、生成对称密钥。这个过程就是TLS 握手。TLS 是 HTTPS 的核心。本文将通过大量图解详细拆解 TLS 1.2 的握手过程并对比 TLS 1.3 的优化。第一部分TLS 握手概述一、握手的目的TLS 握手要完成三件事目的说明协商加密方式双方确定用什么算法对称/非对称/哈希验证身份服务器可选客户端证明我是谁生成密钥双方生成只有彼此知道的对称密钥二、TLS 握手完整流程TLS 1.2三、四个阶段详解第①步Client Hello客户端 → 服务器内容- 支持的 TLS 版本TLS 1.2、TLS 1.3- 支持的加密套件列表如 TLS_RSA_WITH_AES_128_GCM_SHA256- 随机数1Client Random32字节- 会话 ID如果之前连接过可以复用加密套件的命名规则第②步Server Hello服务器 → 客户端内容- 选定的 TLS 版本- 选定的加密套件- 随机数2Server Random32字节- 数字证书包含服务器公钥第③步密钥交换核心步骤这里又分为两种方式RSA 密钥交换和DH 密钥交换。RSA 方式传统DH 密钥交换ECDHE现代主流第④步Finished双方用生成的对称密钥加密一条Finished消息发给对方。如果对方能正确解密说明握手成功。第二部分RSA vs DH 密钥交换对比项RSA 密钥交换ECDHE 密钥交换密钥来源浏览器生成用服务器公钥加密传过去双方各生成临时密钥对交换公钥算出前向安全性❌ 没有服务器私钥泄露历史全部可解密✅ 有每次临时密钥用完即丢性能快稍慢需要多次椭圆曲线运算当前状态已被 TLS 1.3 移除TLS 1.3 唯一方式前向安全性详解第三部分TLS 1.3 的改进TLS 1.32018年发布做了大幅简化TLS 1.3 的核心改进改进说明握手更快从 2-RTT 降到 1-RTT只保留前向安全的算法移除 RSA 密钥交换、移除 CBC 模式0-RTT 恢复之前连接过的客户端可以 0-RTT 发数据加密更多握手信息证书等敏感信息也在握手过程中加密第四部分wireshark 抓包示意# 抓取 TLS 握手包 # 在终端执行 curl -v https://www.example.com用 Wireshark 过滤ssl或tls可以看到Client Hello → Version: TLS 1.2 → Cipher Suites: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, ... Server Hello → Version: TLS 1.2 → Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 → Certificate (服务器证书) Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message Change Cipher Spec, Encrypted Handshake Message Application Data (加密的数据开始传输)第五部分面试题1. QTLS 握手需要几次 RTTATLS 1.2 需要 2-RTTTLS 1.3 只需 1-RTT。2. Q什么是前向安全性哪些算法有A即使服务器长期私钥泄露历史通信也无法被解密。ECDHE 有前向安全性RSA 没有。3. Q为什么 TLS 1.3 移除了 RSA 密钥交换ARSA 不支持前向安全性。TLS 1.3 只保留 ECDHE 这种有前向安全性的密钥交换方式。4. Q加密套件TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256各部分的含义A协议TLS密钥交换ECDHE身份验证RSA对称加密AES-128-GCM哈希SHA256。5. QTLS 握手中三个随机数的作用A客户端随机数 服务器随机数 Pre-Master Secret → 共同计算出对称密钥。每个随机数都是 32 字节确保即使某一方随机数生成器较弱最终密钥仍然安全。总结一、TLS 握手核心流程TLS 1.2 握手 4 步、2-RTT ① Client Hello支持的加密方式 随机数1 ② Server Hello选定加密方式 随机数2 证书 ③ 密钥交换RSA 或 ECDHE ④ Finished验证握手成功 TLS 1.3 握手 2 步、1-RTT 移除了 RSA只保留 ECDHE更快更安全二、一句话记忆TLS 握手通过 Client Hello 和 Server Hello 协商加密方式、交换随机数、验证证书然后用 ECDHE现代或 RSA旧安全交换对称密钥。TLS 1.2 需要 2-RTTTLS 1.3 降到 1-RTT 并强制要求前向安全性。