如何描述 HTTPS 的加密流程?
详细讲解 HTTPS 的 TLS 握手过程,包括两次握手阶段和对称加密数据传输。内容涉及 Client Hello、Server Hello 等步骤。
HTTPS 的加密流程主要依赖 TLS (Transport Layer Security) 协议,用于建立安全连接和传输数据。该流程核心包括两次握手阶段:协商身份和非对称加密建立通信参数,之后切换到对称加密进行实际数据传输。以下根据常见 TLS 版本(如 TLS 1.2 和优化后的 TLS 1.3)整理详细步骤。
- 整体加密流程概述
- 握手阶段(非对称加密):客户端与服务器协商协议版本、加密算法,并交换密钥(如使用服务器公钥加密预主密钥),以实现身份验证并生成共享对称密钥。握手消耗的网络延时时间称为 RTT(Round-Trip Time)。
- 数据传输阶段(对称加密):使用协商生成的会话密钥(如 AES)进行数据加密和解密,以提高效率和保密性。
-
TLS 握手过程详细步骤(以 TLS 1.2 为主流程) TLS 握手在底层 TCP 连接建立后进行。主要包括:
2.1. Client Hello 请求 客户端向服务器发送请求:
- 支持的 TLS 版本(如 TLS 1.2)。
- 支持的加密套件列表(例如
TLS_RSA_WITH_AES_128_GCM_SHA256
)。 - 客户端随机数(32 字节)。
- 可选项:Session ID、服务器名称指示(SNI)。 目的:启动握手,让服务器知道客户端的能力。
2.2. Server Hello 响应 服务器返回响应:
- 确认的 TLS 版本。
- 选择的加密套件。
- 服务器随机数(32 字节)。
- 服务器的数字证书(用于身份验证),包括公钥和证书链(由可信根 CA 签发)。 目的:指定参数进入安全协商阶段。
2.3. 证书验证 客户端收到服务器证书后:
- 验证证书有效:包括签发者可信度(使用预置根 CA 公钥)、有效期(如是否过期)、域名匹配(防止中间人攻击)。
- 检查吊销状态:通过 OCSP 或 CRL 系统。
2.4. 密钥交换 基于验证完成密钥交换:
- 预主密钥交换:客户端生成预主密钥(Pre-Master Secret),用服务器公钥(源自证书)加密后发送给服务器。
- 主密钥生成:服务器使用私钥解密获取预主密钥,双方结合随机数和预主密钥(通过伪随机函数,如 PRF),派生对称会话密钥(如 AES key)。
- 选择算法差异:在 DHE/ECDHE 算法中,双方各自生成临时 Diffie-Hellman 参数,跳过预主密钥交换。 在 TLS 1.3 中使用 ECDHE 优化为省略部分步骤以减少到一次 RTT。
2.5. 完成握手确认 双方发送 Change Cipher Spec 和 Finished 消息:
- Change Cipher Spec:指示后续通信切换到对称加密。
- Finished 消息:加密验证协商内容的完整性。 完成后开启加密数据传输通道。
- 简化版流程对比:TLS 1.3 的优化
- 主要优化:从两次 RTT 简化为一次 RTT;在优化场景支持一次性握手并快速发送数据(0-RTT)。
Key Steps in TLS 1.3: Client Hello → (包含预计算参数) Server Hello → (立刻确认算法和公钥, 生成密钥) → 切换到对称加密数据流。
- 优势:提升性能和连接速度,适用于高频交互,如移动端应用。
- 主要优化:从两次 RTT 简化为一次 RTT;在优化场景支持一次性握手并快速发送数据(0-RTT)。
- 后续数据传输阶段
- 所有数据流都使用对称加密会话密钥(如 AES 或 ChaCha20),提供高效、保密和完整性保护。
- 例如,网页内容或用户表单提交都以此加密传输。
注意:具体实现可能因算法(如 RSA vs ECDHE 密钥交换)和证书机制略有差异,但核心逻辑一致。TLS 1.2 仍广泛使用,TLS 1.3 更适用于新部署。