HTTPS的SSL/TLS握手过程详解
字数 1492 2025-11-04 08:34:41

HTTPS的SSL/TLS握手过程详解

1. 背景与作用
HTTPS在HTTP基础上加入SSL/TLS层,通过加密和身份验证保障通信安全。握手过程是建立安全连接的核心,需协商加密参数、验证服务器身份(可选验证客户端),并生成会话密钥。以下以TLS 1.2为例分步解析。

2. 握手流程详解
步骤1:ClientHello(客户端发起请求)
客户端向服务器发送:

  • 支持的TLS版本(如TLS 1.2)。
  • 客户端随机数(Client Random),用于后续密钥生成。
  • 支持的密码套件列表(Cipher Suites),例如TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,包含密钥交换算法、加密算法、哈希算法。
  • 压缩方法(可选,现代TLS通常禁用)。
  • Session ID(若需恢复会话)。

步骤2:ServerHello(服务器响应协商)
服务器回复:

  • 选择的TLS版本(双方支持的最高版本)。
  • 服务器随机数(Server Random),与Client Random共同生成密钥。
  • 选择的密码套件(如ECDHE_RSA)。
  • Session ID(若支持会话复用)。

步骤3:服务器证书(身份验证)
服务器发送数字证书链,包含:

  • 服务器公钥:用于后续密钥交换(如RSA公钥)。
  • 证书颁发机构(CA)签名:客户端用预置的CA根证书验证证书真实性。

步骤4:ServerKeyExchange(密钥交换参数,仅部分算法需此步)
若使用ECDHE等临时密钥交换算法,服务器会发送:

  • 椭圆曲线参数(如命名曲线secp256r1)。
  • 服务器临时公钥(Server Params),用于生成预主密钥。

步骤5:ServerHelloDone
服务器告知客户端初始协商消息发送完毕。

步骤6:客户端验证证书
客户端检查:

  • 证书是否由信任的CA签发。
  • 证书是否在有效期内。
  • 域名是否匹配。
    若验证失败,连接终止。

步骤7:ClientKeyExchange(客户端密钥交换)
客户端生成:

  • 预主密钥(Pre-Master Secret),用服务器公钥加密(RSA方案)或基于服务器临时公钥生成(ECDHE方案)。
  • 发送加密后的预主密钥或客户端临时公钥(Client Params)。

步骤8:密钥生成
双方使用Client Random、Server Random和预主密钥,通过PRF(伪随机函数)生成:

  • 主密钥(Master Secret)→ 进一步导出会话密钥(加密密钥、MAC密钥、初始化向量)。

步骤9:ChangeCipherSpec(切换加密模式)
客户端发送此消息,表示后续通信将使用协商的密钥加密。

步骤10:Finished(握手完成验证)
客户端发送加密的Finished消息,包含之前所有握手消息的哈希值,供服务器验证完整性。服务器同样回复ChangeCipherSpec和Finished消息。双方验证成功后,安全通道建立。

3. 会话复用优化
为减少握手开销,TLS支持会话复用:

  • Session ID:服务器存储会话参数,客户端下次连接时直接使用ID恢复。
  • Session Ticket:服务器加密会话参数发送给客户端,客户端下次连接时提交Ticket恢复会话。

4. 关键安全特性

  • 前向保密:使用ECDHE等临时密钥交换算法时,即使服务器私钥泄露,历史会话也无法解密。
  • 防篡改:Finished消息验证握手过程未被篡改。
  • 身份验证:证书机制确保客户端与合法服务器通信。
HTTPS的SSL/TLS握手过程详解 1. 背景与作用 HTTPS在HTTP基础上加入SSL/TLS层,通过加密和身份验证保障通信安全。握手过程是建立安全连接的核心,需协商加密参数、验证服务器身份(可选验证客户端),并生成会话密钥。以下以TLS 1.2为例分步解析。 2. 握手流程详解 步骤1:ClientHello(客户端发起请求) 客户端向服务器发送: 支持的TLS版本 (如TLS 1.2)。 客户端随机数 (Client Random),用于后续密钥生成。 支持的密码套件列表 (Cipher Suites),例如 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 ,包含密钥交换算法、加密算法、哈希算法。 压缩方法 (可选,现代TLS通常禁用)。 Session ID (若需恢复会话)。 步骤2:ServerHello(服务器响应协商) 服务器回复: 选择的TLS版本 (双方支持的最高版本)。 服务器随机数 (Server Random),与Client Random共同生成密钥。 选择的密码套件 (如ECDHE_ RSA)。 Session ID (若支持会话复用)。 步骤3:服务器证书(身份验证) 服务器发送数字证书链,包含: 服务器公钥 :用于后续密钥交换(如RSA公钥)。 证书颁发机构(CA)签名 :客户端用预置的CA根证书验证证书真实性。 步骤4:ServerKeyExchange(密钥交换参数,仅部分算法需此步) 若使用ECDHE等临时密钥交换算法,服务器会发送: 椭圆曲线参数 (如命名曲线secp256r1)。 服务器临时公钥 (Server Params),用于生成预主密钥。 步骤5:ServerHelloDone 服务器告知客户端初始协商消息发送完毕。 步骤6:客户端验证证书 客户端检查: 证书是否由信任的CA签发。 证书是否在有效期内。 域名是否匹配。 若验证失败,连接终止。 步骤7:ClientKeyExchange(客户端密钥交换) 客户端生成: 预主密钥 (Pre-Master Secret),用服务器公钥加密(RSA方案)或基于服务器临时公钥生成(ECDHE方案)。 发送加密后的预主密钥或客户端临时公钥(Client Params)。 步骤8:密钥生成 双方使用Client Random、Server Random和预主密钥,通过PRF(伪随机函数)生成: 主密钥 (Master Secret)→ 进一步导出会话密钥(加密密钥、MAC密钥、初始化向量)。 步骤9:ChangeCipherSpec(切换加密模式) 客户端发送此消息,表示后续通信将使用协商的密钥加密。 步骤10:Finished(握手完成验证) 客户端发送加密的Finished消息,包含之前所有握手消息的哈希值,供服务器验证完整性。服务器同样回复ChangeCipherSpec和Finished消息。双方验证成功后,安全通道建立。 3. 会话复用优化 为减少握手开销,TLS支持会话复用: Session ID :服务器存储会话参数,客户端下次连接时直接使用ID恢复。 Session Ticket :服务器加密会话参数发送给客户端,客户端下次连接时提交Ticket恢复会话。 4. 关键安全特性 前向保密 :使用ECDHE等临时密钥交换算法时,即使服务器私钥泄露,历史会话也无法解密。 防篡改 :Finished消息验证握手过程未被篡改。 身份验证 :证书机制确保客户端与合法服务器通信。