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

相关推荐
虎头金猫2 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
wuyk5552 天前
《WiFi 嵌入式物联网开发全套实战》| 第 16 章 ESP32 AP+STA 双模共存原理与工程坑点
网络·stm32·物联网
XUEYUAN52122 天前
ASN 自治系统号风控:平台如何通过 IP 所属自治域批量识别代理流量
python·网络协议·http·网络安全·socks5
QYRdata3 天前
年均增速24.2%!机器人数据湖未来六年增长动能强劲
网络·机器人·服务发现
CHENKONG_CK3 天前
破解制鞋打磨痛点:RFID赋能去毛刺工序自动化升级
网络·单片机·嵌入式硬件·网络协议·tcp/ip
chshang19923 天前
工业路由器是什么?浅谈5G工业网络中的IR602
网络·物联网·5g·智能路由器
萧瑟余晖3 天前
Netty 核心组件与 Reactor 模型详解
网络·架构
ITxiaobing20233 天前
IP 定位服务选型指南:从准确率到工程落地的技术考察
linux·服务器·网络
wuyk5553 天前
【Socket 进阶之路】第 9 章 Linux 网络服务量产稳定性优化|心跳保活、TIME_WAIT、SO_LINGER、内存池、断线重连、完整异常防护框架
linux·服务器·开发语言·网络·物联网
z落落3 天前
C#UDP+串口服务端+UDP 客户端(含 CRC16 校验)
网络·网络协议·udp