以 TLS 1.2(RSA 密钥交换)为例,握手在 TCP 三次握手之后进行,核心是验证身份 + 协商出会话密钥

  1. ClientHello:客户端发送支持的 TLS 版本、加密套件列表、随机数 Random1。
  2. ServerHello + 证书:服务端选定套件,返回随机数 Random2 和数字证书(含公钥)。
  3. 验证与密钥交换:客户端用内置 CA 根证书验证服务端证书链合法、域名匹配;然后生成预主密钥(Pre-Master Secret),用证书中的公钥加密后发给服务端。
  4. 生成会话密钥:双方用 Random1 + Random2 + 预主密钥各自算出相同的对称会话密钥。
  5. Finished:双方互发用会话密钥加密的验证消息,确认握手成功,之后应用数据全用对称加密传输。

展开解析:TLS 1.3 做了大幅精简——废弃 RSA 密钥交换,只用(EC)DHE 实现前向安全;握手压缩到 1-RTT(密钥交换在 Hello 阶段完成),支持 0-RTT 恢复会话。

易错点:非对称加密只用于认证和密钥交换,后续通信用对称密钥;ECDHE 模式下私钥不直接加密密钥,而是双方各自算出共享秘密。

追问方向:中间人攻击为何失败(证书链 + CA 信任)、前向安全的含义、会话复用。