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 并强制要求前向安全性。

相关推荐
extrao1 天前
🚀 Kea DHCP4 自动分配系统完整搭建
网络协议
喵个咪1 天前
Go-Wind HTTP 服务器从入门到精通
后端·http·go
不做菜鸟的网工3 天前
BGP特性
网络协议
明月_清风5 天前
开发者网络概念全扫盲:一篇搞定
后端·网络协议
刘马想放假5 天前
Modbus 全栈技术解析:TCP、RTU、ASCII、RTU over TCP
数据结构·网络协议
王二端茶倒水6 天前
一套可落地的无线运营方案,不能只管 AP,还要管用户、计费和运维
网络协议
162723816086 天前
EtherCAT 分布式时钟(DC)原理与配置实战:把多轴真正"对齐到同一时刻"
网络协议
王二端茶倒水7 天前
宽带无线项目,怎么从一次性交付变成长期运营收入?
网络协议
Goodbye7 天前
大模型无状态架构:从 HTTP 协议到 Harness AI 工程的深度解析
http