https交互原理
Https 交互时序图:
HTTPS 通信中结合 RSA 和 AES 加密的流程,本质是利用 RSA 的安全特性交换 AES 密钥,再用高效的 AES 加密实际数据传输。
HTTPS 交互核心流程(TLS/SSL 握手)
1. 建立 TCP 连接
- 客户端通过 TCP 三次握手连接服务器的 443 端口。
2. TLS/SSL 握手(密钥协商阶段)
-
Client Hello
客户端发送支持的功能列表:TLS 版本、支持的加密套件(如TLS_RSA_WITH_AES_256_GCM_SHA384
)、客户端随机数(Client Random
)。 -
Server Hello
服务器选择加密套件(如 RSA + AES-256),并发送:- 服务器随机数(
Server Random
) - 数字证书(含服务器的 RSA 公钥,由 CA 签发)。
- 服务器随机数(
-
客户端验证证书
客户端用 CA 公钥验证证书合法性(防中间人攻击)。 -
Pre-Master Secret 生成与加密(RSA 核心步骤)
- 客户端生成 Pre-Master Secret(46 字节随机数)。
- 用服务器的 RSA 公钥加密 Pre-Master Secret → 得到 Encrypted Pre-Master Secret。
- 发送
Client Key Exchange
消息(包含加密后的 Pre-Master Secret)。
-
服务器解密 Pre-Master Secret(RSA 核心步骤)
服务器用 RSA 私钥解密获得 Pre-Master Secret。 -
生成会话密钥(AES 密钥的诞生)
客户端和服务器分别用以下三个参数生成相同的 Master Secret:Master Secret = PRF(Pre-Master Secret, "master secret", Client Random + Server Random)
再根据 Master Secret 派生出 AES 对称密钥(如 AES-256 密钥)和 MAC 密钥。
-
切换加密模式通知
双方发送Change Cipher Spec
消息,宣告后续通信使用协商的密钥加密。 -
握手完成验证
双方发送加密的Finished
消息,验证握手过程是否一致且未被篡改。
3. 加密数据传输(AES 核心阶段)
-
应用数据加密
- 客户端用协商的 AES 密钥加密 HTTP 请求(如
AES-GCM
模式加密 + 完整性校验)。 - 发送加密后的数据到服务器。
- 客户端用协商的 AES 密钥加密 HTTP 请求(如
-
服务器解密与响应
- 服务器用相同的 AES 密钥解密请求。
- 处理请求后,再用 AES 密钥加密响应数据返回给客户端。
-
客户端解密响应
客户端用 AES 密钥解密响应,获得明文内容。
为什么结合 RSA 和 AES?
阶段 | RSA 作用 | AES 作用 | 优势 |
---|---|---|---|
密钥交换 | 加密传输 Pre-Master Secret(短数据) | - | 非对称加密保证密钥安全交换 |
数据传输 | - | 加密实际 HTTP 数据(长数据) | 对称加密速度快,适合大数据量 |
安全性 | 解决密钥分发问题 | 提供高效加密 | 兼顾安全性与性能 |
关键安全设计解析
-
RSA 保护 AES 密钥
- Pre-Master Secret 是 AES 密钥的“种子”,由 RSA 公钥加密后传输,仅服务器私钥可解密。
- 即使攻击者截获流量,也无法破解 Pre-Master Secret(RSA 数学难题保障)。
-
前向保密(可选增强)
现代 TLS 常用 ECDHE-RSA 替代 RSA 密钥交换:- ECDHE 生成临时会话密钥,即使服务器 RSA 私钥泄漏,历史会话仍安全。
- RSA 仅用于签名认证(不直接加密密钥)。
-
AES 高效加密
- AES-256 提供 256 位密钥强度,加密速度快(比 RSA 快千倍以上)。
- 工作模式(如 GCM)同时提供加密和完整性校验。
总结
- RSA 用于信任链建立和安全交换 AES 密钥(短数据加密)。
- AES 用于高效加密实际通信数据(长数据加密)。
- 这种组合在安全性和性能上达到最优平衡,是 HTTPS 的基石设计。