type
status
date
slug
summary
tags
category
icon
password
🔐 TLS 通信过程简述(以 HTTPS 为例):
TLS 主要用于在客户端(浏览器)和服务器(网站)之间建立加密通信通道,防止窃听、中间人攻击和数据篡改。
🔄 1. 客户端 Hello(Client Hello)
- 客户端发起请求,发送:
- 支持的 TLS 协议版本
- 支持的 加密算法(Cipher Suites)
- 一个 随机数(Client Random)
- 其他可选信息(如支持的扩展功能)
🔄 2. 服务器 Hello(Server Hello)
服务器响应,并发送:
- 协商选定的:
- TLS 版本
- 加密算法
- 自己的 随机数(Server Random)
- 自己的 数字证书(含公钥,用于身份验证)
- 如果使用 Diffie-Hellman,还会发送 DH 公钥参数
🔍 3. 证书验证(由客户端完成)
客户端用内置的 根证书(CA) 验证服务器证书是否合法(颁发者、域名、有效期等)。
- 如果验证失败,则中断通信。
🔑 4. 生成对称加密密钥(Master Secret)
根据密钥交换算法的不同,客户端会:
如果使用 RSA 密钥交换:
- 客户端生成一个 预主密钥(Pre-Master Secret)
- 用服务器公钥加密后发送
如果使用 Diffie-Hellman(DHE 或 ECDHE):
- 客户端和服务器互相交换 DH 公钥
- 双方使用自己的私钥 + 对方公钥计算出同一个 Pre-Master Secret
Diffie-Hellman
- 公开颜色(g):黄色
→ 所有人都知道的基础颜色
- 双方选私密颜色(a、b):红色 / 蓝色
→ 自己秘密的“私钥”
- 混合生成公开色(公钥 A、B):橙色 / 青色
→ 黄色 + 私密颜色,作为公钥发送给对方
- 交换公钥后,各自再加一次自己的私密色
→ Alice:青色 + 红色
→ Bob:橙色 + 蓝色
- 双方最终得到相同的“共享颜色”
→ 这就是 共享密钥,外人无法得知
- 攻击者(Eve)只能看到黄色、橙色、青色,
→ 看不到红色或蓝色 → 无法算出最终的密钥
🔐 5. 生成 Master Secret & Session Key(共享密钥)
- 客户端和服务器使用:
Pre-Master Secret
Client Random
Server Random
- 通过一个函数(Pseudo-Random Function, PRF)计算出:
- Master Secret
- 从中进一步派生出:
- 会话密钥(Session Keys) → 用于实际数据的加解密(对称加密)
🔒 6. Finished 报文(加密验证阶段)
- 双方用新生成的 Session Key 对通信内容加密,并互相发送“Finished”消息,表示后续通信将采用加密方式。
- 从这一刻起,通信内容是 加密的。
✅ 成功建立 TLS 连接后:
客户端和服务器开始用对称加密(AES 等)加密的数据进行通信。TLS 层还负责:
- 数据完整性校验(防篡改)
- 数据机密性保护(防窃听)
总结流程图(简洁版):

- Author:minami
- URL:http://preview.tangly1024.com/national-license/1e7d7ae8-88e2-80fa-a4e9-f2248b412c63
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts