《TLS 握手过程详解(RSA)》

《TLS 握手过程详解(RSA)》

1 简介

TLS(传输层安全协议)握手的目标是:协商加密套件、完成身份认证、安全地生成会话密钥,之后双方用会话密钥对称加密正文,保证机密性与完整性。本文以 RSA 密钥交换为例说明握手过程。

2 TLS Handshake(RSA)

  1. client -> server:Client Hello,携带 client_random(随机字节)与支持的 cipher_suites。
  2. server -> client:Server Hello,携带 server_random、public_key_certificate(服务器证书,含公钥)与 session_id。
  3. client -> server:使用证书中的公钥加密随机 premaster_key,得到 encrypted_premaster_key 回传。
  4. server:使用私钥解密得到 premaster_key。
  5. 双方用 client_random + server_random + premaster_key 独立计算出相同的 session_key。
  6. 之后通过 session_key 加密通信,进入安全通道。

关键点:premaster_key 用 RSA 公钥加密传输,私钥只在服务器端,理论上正确。

3 TLS Handshake(RSA)with Keyless SSL

Keyless SSL(如 CDN 场景)把私钥保留在源站,边缘节点只做转发:

  1. client -> edge:Client Hello(client_random + cipher_suites)。
  2. edge -> client:Server Hello(server_random + public_key_certificate + session_id)。
  3. client -> edge:用公钥加密 premaster_key 回传。
  4. edge -> origin:把 encrypted_premaster_key 转发给源站。
  5. origin:用私钥解密后,把 premaster_key 回传给边缘节点。
  6. 边缘节点与客户端使用 client_random + server_random + premaster_key 计算 session_key。
  7. 之后客户端与边缘节点用 session_key 加解密数据,源站不必每次参与数据面转发。

好处:私钥不离开源站,又享受 CDN 边缘终结 TLS。

4 SSL 与 TLS 的关系

  • TLS 是 SSL 的继任者;SSLv2/SSLv3 已不再安全,实际应使用 TLS 1.2 / 1.3;
  • 排查抓包与证书问题时,优先确认协商到的是 TLS 而非 SSL。

5 常见问题

5.1 握手失败常见原因

  • 客户端/服务端 cipher_suites 无交集;
  • 证书过期、域名与 SAN 不匹配(Common Name 与 hostname 不一致);
  • 私钥与证书不匹配。

5.2 如何验证证书与私钥匹配

# 分别取证书与私钥的公钥指纹做对比 openssl x509 -in cert.pem -noout -pubkey | openssl md5 openssl pkey -in key.pem -pubout | openssl md5

6 参考资料

阅读 — · 全站 —
🎸 我的歌单 0 首