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)

  • 随机数1(Client Random,32字节)

  • 会话 ID(如果之前连接过,可以复用)

加密套件的命名规则

第②步:Server Hello

服务器 → 客户端

内容:

  • 选定的 TLS 版本

  • 选定的加密套件

  • 随机数2(Server Random,32字节)

  • 数字证书(包含服务器公钥)

第③步:密钥交换(核心步骤)

这里又分为两种方式:RSA 密钥交换DH 密钥交换

RSA 方式(传统)

DH 密钥交换(ECDHE,现代主流)

第④步:Finished

双方用生成的对称密钥加密一条"Finished"消息发给对方。如果对方能正确解密,说明握手成功。


第二部分:RSA vs DH 密钥交换

对比项 RSA 密钥交换 ECDHE 密钥交换
密钥来源 浏览器生成,用服务器公钥加密传过去 双方各生成临时密钥对,交换公钥算出
前向安全性 ❌ 没有(服务器私钥泄露=历史全部可解密) ✅ 有(每次临时密钥用完即丢)
性能 稍慢(需要多次椭圆曲线运算)
当前状态 已被 TLS 1.3 移除 TLS 1.3 唯一方式

前向安全性详解

第三部分:TLS 1.3 的改进

TLS 1.3(2018年发布)做了大幅简化:

TLS 1.3 的核心改进

改进 说明
握手更快 从 2-RTT 降到 1-RTT
只保留前向安全的算法 移除 RSA 密钥交换、移除 CBC 模式
0-RTT 恢复 之前连接过的客户端可以 0-RTT 发数据
加密更多握手信息 证书等敏感信息也在握手过程中加密

第四部分:wireshark 抓包示意

bash 复制代码
# 抓取 TLS 握手包
# 在终端执行:
curl -v https://www.example.com

用 Wireshark 过滤 ssltls,可以看到:

bash 复制代码
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. Q:TLS 握手需要几次 RTT?

A:TLS 1.2 需要 2-RTT,TLS 1.3 只需 1-RTT。

2. Q:什么是前向安全性?哪些算法有?

A:即使服务器长期私钥泄露,历史通信也无法被解密。ECDHE 有前向安全性,RSA 没有。

3. Q:为什么 TLS 1.3 移除了 RSA 密钥交换?

A:RSA 不支持前向安全性。TLS 1.3 只保留 ECDHE 这种有前向安全性的密钥交换方式。

4. Q:加密套件 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 各部分的含义?

A:协议=TLS,密钥交换=ECDHE,身份验证=RSA,对称加密=AES-128-GCM,哈希=SHA256。

5. Q:TLS 握手中三个随机数的作用?

A:客户端随机数 + 服务器随机数 + Pre-Master Secret → 共同计算出对称密钥。每个随机数都是 32 字节,确保即使某一方随机数生成器较弱,最终密钥仍然安全。


总结

一、TLS 握手核心流程

bash 复制代码
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-RTT,TLS 1.3 降到 1-RTT 并强制要求前向安全性。

相关推荐
xlq223221 小时前
66.ip
网络·网络协议·tcp/ip
tudoSearcher1 小时前
手机、平板、电脑同时控制Claude Code / Codex ?:Paseo实战指南
网络·开源·开源软件·个人开发·ai编程
加农炮手Jinx1 小时前
Flutter for OpenHarmony:pub_updater 命令行工具自动更新专家(DevOps 运维必备) 深度解析与鸿蒙适配指南
android·运维·网络·flutter·华为·harmonyos·devops
华纳云IDC服务商1 小时前
高防CDN和高防IP一起用,延迟会增加多少?
网络·网络协议·tcp/ip
sxd20012 小时前
Debian #1135514 bug引发的思考
网络·debian·bug
VOOHU-沃虎2 小时前
沃虎——一台旧设备的“慢性病”:网络变压器回波损耗劣化引发的间歇性断流
网络·信息与通信
叶帆2 小时前
【YFIOs】用C#开发硬件之WiFi网络
开发语言·网络·c#
yuegu7772 小时前
HarmonyOS应用<节气通>开发第25篇:HTTP请求封装
网络协议·http·harmonyos
梦想的旅途22 小时前
企业微信外部群主动调用:RPA 接口与官方 API 的技术边界
网络·mysql·自动化·企业微信·rpa