《TLS 握手过程详解(RSA)》
1 简介
TLS(传输层安全协议)握手的目标是:协商加密套件、完成身份认证、安全地生成会话密钥,之后双方用会话密钥对称加密正文,保证机密性与完整性。本文以 RSA 密钥交换为例说明握手过程。
2 TLS Handshake(RSA)
client -> server:Client Hello,携带client_random(随机字节)与支持的cipher_suites。server -> client:Server Hello,携带server_random、public_key_certificate(服务器证书,含公钥)与session_id。client -> server:使用证书中的公钥加密随机premaster_key,得到encrypted_premaster_key回传。server:使用私钥解密得到premaster_key。- 双方用
client_random + server_random + premaster_key独立计算出相同的 session_key。 - 之后通过 session_key 加密通信,进入安全通道。
关键点:premaster_key 用 RSA 公钥加密传输,私钥只在服务器端,理论上正确。
3 TLS Handshake(RSA)with Keyless SSL
Keyless SSL(如 CDN 场景)把私钥保留在源站,边缘节点只做转发:
client -> edge:Client Hello(client_random + cipher_suites)。edge -> client:Server Hello(server_random + public_key_certificate + session_id)。client -> edge:用公钥加密premaster_key回传。edge -> origin:把encrypted_premaster_key转发给源站。origin:用私钥解密后,把premaster_key回传给边缘节点。- 边缘节点与客户端使用
client_random + server_random + premaster_key计算 session_key。 - 之后客户端与边缘节点用 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 参考资料
- 阮一峰《SSL/TLS 协议运行机制》:http://www.ruanyifeng.com/blog/2014/02/ssl_tls.html
阅读 —
·
全站 —