目录
[Client Random 的作用](#Client Random 的作用)
九、ClientKeyExchange:生成PreMasterSecret
[Step1:生成 PreMasterSecret](#Step1:生成 PreMasterSecret)
[Step2:生成 MasterSecret](#Step2:生成 MasterSecret)
[Step3:生成 Session Key](#Step3:生成 Session Key)
[1 随机数机制](#1 随机数机制)
[2 密钥协商](#2 密钥协商)
[3 证书验证](#3 证书验证)
[4 会话密钥](#4 会话密钥)
[十四、IoT场景:MQTT TLS连接](#十四、IoT场景:MQTT TLS连接)

在现代互联网和物联网系统中,安全通信几乎都建立在 Transport Layer Security(TLS) 协议之上。无论是 HTTPS 网站访问、微服务 API 调用,还是 IoT 设备连接云平台(例如 **MQTT over TLS),都会经历一个关键步骤:TLS Handshake(TLS握手)。
TLS握手的核心目标是:
-
协商安全参数
-
验证通信双方身份
-
安全生成会话密钥
最终建立一个 安全的加密通信通道。
本文将深入解析 TLS 握手流程,从 ClientHello 到 Finished 的完整过程,并重点解释:
-
随机数的作用
-
密钥协商机制
-
证书验证流程
-
会话密钥生成过程
同时结合 IoT设备连接场景进行说明。
一、TLS握手的核心目标
TLS握手的本质是 建立共享会话密钥(Session Key)。
通信流程如下:
Client
↓
Handshake
↓
Session Key
↓
Encrypted Communication
握手阶段完成以下三件事:
|------|---------|
| 目标 | 说明 |
| 算法协商 | 确定加密算法 |
| 身份认证 | 验证服务器证书 |
| 密钥协商 | 生成共享密钥 |
一旦握手完成,后续通信将全部使用 对称加密。
二、TLS握手完整流程
以 TLS1.2典型流程为例:
ClientHello
ServerHello
Certificate
ServerKeyExchange
ServerHelloDone
ClientKeyExchange
ChangeCipherSpec
Finished
整个流程大约需要:
2 RTT
接下来逐步解析每一步。
三、ClientHello:客户端发起连接
握手由客户端开始。
客户端发送:
ClientHello
内容包括:
|---------------|----------|
| 字段 | 作用 |
| TLS Version | 支持的TLS版本 |
| Client Random | 随机数 |
| Cipher Suites | 支持的加密套件 |
| Extensions | 扩展功能 |
示例:
ClientHello
Version: TLS1.2
Random: 32 bytes
Cipher Suites: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
Client Random 的作用
ClientHello中的随机数非常重要。
TLS中使用三个随机值:
Client Random
Server Random
PreMasterSecret
这些随机数将参与密钥生成,防止攻击者预测密钥。
四、ServerHello:服务器响应
服务器收到 ClientHello 后返回:
ServerHello
内容包括:
|---------------|---------|
| 字段 | 说明 |
| TLS Version | 选择的协议版本 |
| Server Random | 服务器随机数 |
| Cipher Suite | 最终加密套件 |
示例:
ServerHello
Version: TLS1.2
CipherSuite: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
此时双方已经确定:
-
TLS版本
-
加密算法
五、Certificate:服务器发送证书
服务器发送自己的 数字证书。
证书通常是 X.509证书。
内容包括:
Server Certificate
Public Key
CA Signature
证书的作用:
证明服务器身份
证书链结构:
Root CA
↓
Intermediate CA
↓
Server Certificate
浏览器或客户端通过 CA信任链验证服务器身份。
六、ServerKeyExchange:密钥协商参数
如果使用 ECDHE算法,服务器需要发送:
ServerKeyExchange
其中包含:
ECDHE Public Key
Signature
作用:
用于密钥协商
服务器用私钥对参数进行签名,防止被篡改。
七、ServerHelloDone:服务器阶段结束
服务器发送:
ServerHelloDone
表示服务器发送的数据已经完成。
接下来轮到客户端处理。
八、客户端验证服务器证书
客户端需要验证服务器证书是否合法。
验证流程:
检查证书签名
↓
验证CA
↓
验证域名
↓
检查有效期
如果验证失败:
Handshake Failure
连接终止。
九、ClientKeyExchange:生成PreMasterSecret
客户端生成一个关键数据:
PreMasterSecret
然后发送:
ClientKeyExchange
如果使用 RSA:
PreMasterSecret
↓
服务器公钥加密
↓
发送服务器
服务器用私钥解密。
如果使用 ECDHE:
双方通过 Diffie-Hellman算法计算共享密钥。
十、密钥生成过程
TLS密钥生成流程如下。
Step1:生成 PreMasterSecret
客户端生成:
PreMasterSecret
Step2:生成 MasterSecret
双方使用以下数据计算:
MasterSecret = PRF(
PreMasterSecret,
ClientRandom,
ServerRandom
)
PRF表示伪随机函数。
Step3:生成 Session Key
从 MasterSecret 派生:
Client Write Key
Server Write Key
MAC Key
IV
最终得到:
Session Key
用于加密通信。
十一、ChangeCipherSpec:切换加密模式
客户端发送:
ChangeCipherSpec
表示:
后续通信开始使用加密
服务器也会发送相同消息。
十二、Finished:握手完成
客户端发送:
Finished
该消息已经使用 Session Key 加密。
服务器验证成功后返回:
Finished
至此 TLS握手完成。
十三、TLS握手中的关键安全机制
TLS之所以安全,依赖多个关键机制。
1 随机数机制
TLS使用多个随机值:
ClientRandom
ServerRandom
PreMasterSecret
作用:
-
防止重放攻击
-
防止密钥预测
2 密钥协商
常见算法:
|-------|--------|
| 算法 | 特点 |
| RSA | 简单 |
| DHE | 支持前向安全 |
| ECDHE | 性能更好 |
现代TLS推荐:
ECDHE
3 证书验证
TLS使用 PKI体系。
证书链:
Root CA
↓
Intermediate CA
↓
Server Certificate
常见CA:
-
Let's Encrypt
-
DigiCert
4 会话密钥
TLS使用 对称加密进行数据传输。
原因:
|-------|----|
| 算法 | 性能 |
| 非对称加密 | 慢 |
| 对称加密 | 快 |
| | |
握手阶段使用非对称加密,通信阶段使用对称加密。
十四、IoT场景:MQTT TLS连接
在IoT系统中,TLS常用于:
MQTT over TLS
流程:
设备
↓
TCP连接
↓
TLS握手
↓
MQTT CONNECT
↓
数据通信
典型平台:
-
AWS IoT Core
-
EMQX
端口:
8883
十五、IoT设备认证(mTLS)
IoT设备通常使用 双向TLS认证。
流程:
Device Certificate Server Certificate
服务器验证设备证书。
优势:
-
防止设备伪造
-
强身份认证
这是现代 IoT 平台最常见的认证方式。
总结
TLS握手的核心任务是 安全生成共享会话密钥。
完整流程:
ClientHello
ServerHello
Certificate
ServerKeyExchange
ServerHelloDone
ClientKeyExchange
ChangeCipherSpec
Finished
关键安全机制包括:
|------|--------|
| 机制 | 作用 |
| 随机数 | 防止重放 |
| 密钥协商 | 生成共享密钥 |
| 证书验证 | 确认身份 |
| 会话密钥 | 加密通信 |
在现代系统中,TLS不仅用于 Web,还广泛应用于:
-
IoT设备连接
-
API通信
-
微服务架构
成为互联网安全通信的基础设施。
扩展阅读:
|---------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| MQTT 协议原理全解析:从通信机制到大规模 IoT 架构设计 | MQTT 协议原理全解析:从通信机制到大规模 IoT 架构设计 |
| 百万设备接入:MQTT 架构设计实战指南 | 百万设备接入:MQTT 架构设计实战指南 |
| MQTT Topic 设计规范:企业级 IoT 平台最佳实践 | MQTT Topic 设计规范:企业级 IoT 平台最佳实践 |
| IoT 平台架构全景图:从设备到 AI 的完整技术体系深度解析 | IoT 平台架构全景图:从设备到 AI 的完整技术体系深度解析 |
| AIoT 架构师知识体系地图:从设备到 AI 的完整技术栈 | AIoT 架构师知识体系地图:从设备到 AI 的完整技术栈 |
| 智能锁 MQTT QoS 设计实战:可靠开锁通信架构与踩坑指南 | 智能锁 MQTT QoS 设计实战:可靠开锁通信架构与踩坑指南 |
| MQTT Retain / Session / Will 三大机制深度解析:物联网设备状态管理核心 | MQTT Retain / Session / Will 三大机制深度解析:物联网设备状态管理核心 |
| MQTT Retain / Last Will / Clean Session 深度解析:智能设备在线状态设计 | MQTT Retain / Last Will / Clean Session 深度解析:智能设备在线状态设计 |
| 百万级 IoT 平台架构核心:深度解析 MQTT Topic 层次化设计方法论 | 百万级 IoT 平台架构核心:深度解析 MQTT Topic 层次化设计方法论 |
| 逐字节剖析 MQTT:百万级智能锁平台的报文结构与 Topic 字典设计实战 | 逐字节剖析 MQTT:百万级智能锁平台的报文结构与 Topic 字典设计实战 |