HTTPS握手过程
字数 952 2025-11-14 04:41:08
HTTPS握手过程
HTTPS握手过程是建立安全通信连接的关键步骤,涉及身份验证和密钥交换。以下是逐步分解:
1. 客户端发起请求(ClientHello)
客户端(如浏览器)向服务器发送以下信息:
- 支持的TLS版本(如TLS 1.2或1.3)。
- 密码套件列表(例如
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256),包含密钥交换、加密和哈希算法。 - 随机数(Client Random),用于后续生成会话密钥。
2. 服务器响应(ServerHello)
服务器返回以下内容:
- 选定的TLS版本和密码套件(从客户端提供的列表中选择)。
- 随机数(Server Random),同样用于密钥生成。
- 数字证书(包含公钥、域名、颁发机构签名等),供客户端验证身份。
- (可选)证书请求(如需要客户端认证)。
3. 客户端验证证书
客户端执行以下操作:
- 检查证书颁发机构(CA) 是否受信任(通过预置的根证书验证签名链)。
- 确认证书有效期和域名匹配。
- 若验证失败,终止连接并显示警告(如“证书无效”)。
4. 密钥交换(Pre-Master Secret生成)
客户端:
- 生成另一个随机数 Pre-Master Secret。
- 用证书中的服务器公钥加密 Pre-Master Secret,发送给服务器。
- (在TLS 1.3中改为直接通过Diffie-Hellman交换共享密钥)。
5. 会话密钥生成
客户端和服务器分别使用以下数据生成相同的会话密钥:
- Client Random
- Server Random
- Pre-Master Secret
通过指定哈希函数(如SHA-256)生成对称加密密钥,用于后续数据传输。
6. 安全通道建立
双方交换完成以下消息:
- 客户端发送“Finished”消息:用会话密钥加密一段验证数据,证明密钥正确。
- 服务器发送“Finished”消息:同样返回加密的验证数据。
此后,所有通信均使用会话密钥加密,进入安全传输阶段。
补充说明
- 前向保密:若使用ECDHE等密钥交换算法,即使服务器私钥泄露,历史会话也无法被解密。
- TLS 1.3简化:将握手步骤从2轮减少到1轮,通过合并密钥交换提升速度。