Skip to content

TLS 握手流程

约 915 字大约 3 分钟

计算机网络腾讯

2025-03-13

⭐ 题目日期:

腾讯 - 2024/08/19

📝 题解:

TLS(Transport Layer Security)握手是建立安全通信通道的核心过程,确保数据加密和身份验证。以下是 TLS 1.2TLS 1.3 的握手流程对比及详细解析:


一、TLS1.2 握手流程(经典四次交互)

1. Client Hello

  • 客户端发起
    • 发送支持的 TLS 版本、客户端随机数(Client Random)、密码套件列表(Cipher Suites)、压缩方法等。
    • 可选扩展(如 SNI:Server Name Indication,指定访问的域名)。

2. Server Hello

  • 服务端响应
    • 选择 TLS 版本、服务端随机数(Server Random)、确定的密码套件(如 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256)。
    • 返回证书链(Certificate)用于身份验证。

3. 密钥交换与验证

  • 服务端发送
    • Certificate:服务端证书链(包含公钥)。
    • Server Key Exchange:密钥交换参数(如 ECDHE 公钥)。
    • Certificate Request(可选):要求客户端提供证书(双向认证)。
    • Server Hello Done:通知客户端信息发送完毕。
  • 客户端验证
    • 校验服务端证书链是否可信(检查签名、有效期、吊销状态等)。
    • 生成预主密钥(Pre-Master Secret),使用服务端公钥加密后发送(Client Key Exchange)。
    • 若需双向认证,发送客户端证书和签名(Certificate Verify)。

4. 会话密钥生成

  • 主密钥计算: 客户端和服务端通过以下参数计算主密钥(Master Secret):
Master Secret = PRF(Pre-Master Secret, "master secret", ClientRandom + ServerRandom)
  • 会话密钥派生: 通过主密钥生成会话密钥(加密密钥、MAC 密钥、初始向量等)。

5. 切换加密与完成握手

  • Change Cipher Spec: 双方通知后续通信使用协商的加密参数。
  • Finished: 发送加密的 Finished 消息,验证握手过程完整性。

二、TLS 1.3 握手流程(简化与性能优化)

1. Client Hello

  • 客户端发起
    • 支持 TLS 1.3,发送客户端随机数、密码套件列表、密钥共享参数(如 ECDHE 公钥)。
    • 扩展优化(如 Pre-Shared Key, PSK 用于 0-RTT)。

2. Server Hello

  • 服务端响应
    • 选择 TLS 1.3,发送服务端随机数、密钥共享参数(ECDHE 公钥)。
    • Certificate:证书链(支持 OCSP Stapling 减少延迟)。
    • Certificate Verify:服务端签名验证身份。
    • Finished:直接完成握手。

3. 密钥生成

  • 主密钥计算: 双方通过 ECDHE 参数直接计算共享密钥(无需预主密钥):
Shared Secret = ECDH(Client_Private_Key, Server_Public_Key)
  • 会话密钥派生: 使用 HKDF 算法生成加密密钥。

4. 完成握手

  • 客户端发送 Finished: 验证握手完整性,切换至加密通信。
  • 1-RTT 完成:相比 TLS 1.2 减少一次往返(RTT)。

三、TLS 1.2 vs TLS 1.3 关键改进

img


四、安全性增强

  1. 前向安全性(Forward Secrecy): TLS 1.3 强制使用 ECDHE,即使长期私钥泄露,历史会话也无法解密。
  2. 加密握手过程: TLS 1.3 对 Server Hello 之后的消息全程加密,防止握手信息被窥探。
  3. 0-RTT 风险: 0-RTT 数据可能被重放攻击,需业务层防御(如限制幂等操作)。

五、典型场景

  1. Web 访问(HTTPS): TLS 1.3 显著减少首字节时间(TTFB),提升用户体验。
  2. API 通信: 高频请求受益于 1-RTT 握手和会话复用。
  3. 物联网设备: 低功耗设备通过 0-RTT 优化能耗。

总结

  • TLS 1.2:兼容性广,需谨慎配置密码套件(禁用不安全选项)。
  • TLS 1.3:性能与安全性更优,逐步成为主流标准。
  • 核心价值:通过密钥交换、身份验证和加密通信,保障数据机密性、完整性和真实性。