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 过滤 ssl 或 tls,可以看到:

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

相关推荐
花间相见7 小时前
【计算基础|网络14】网络层:IP、ICMP 与 ping
网络·网络协议·tcp/ip
OnlineProxy8 小时前
为 LangChain 和 CrewAI 构建自定义工具:将代理 IP 轮换封装至智能体函数中
网络协议·tcp/ip·langchain
半杯咖啡半行码9 小时前
Linux 驱动开发入门:内核模块编程基础
linux·服务器·网络
智能直播10 小时前
RK3528 V4L2 框架 UVC 接口自动获取 H.264 / MJPEG / YUYV 格式:从内核采集到硬解分发
java·网络·实时音视频·视频编解码·h.264
睿智の男孩10 小时前
MIG IP核对DDR3的输出时序分析记录
网络·网络协议·tcp/ip
艾芯微科技10 小时前
高充放电流锂电充放 SoC:ETA9885E10,便携储能、小移动电源 BOM 选型笔记
网络·单片机·嵌入式硬件·集成测试·51单片机
2401_8685347811 小时前
数据交换方式
服务器·网络
艾芯微科技11 小时前
钰泰 ETA6973PQ3Y|QFN3×3 2A 同步降压 Buck,I2C 可配置多档输出,动态调压 PMIC
网络·单片机·嵌入式硬件·fpga开发·集成测试·51单片机
默|笙11 小时前
【Linux网络】_udp_socket(认识)
linux·网络·udp