HTTPS ECDHE 握手全解析
在 HTTPS 的安全体系中,握手阶段是决定通信是否安全、高效的关键 —— 而如今主流的ECDHE 握手,凭借 "前向保密" 和高性能的优势,几乎成了所有现代网站的标配。
一、先搞懂:什么是 ECDHE 握手?
ECDHE 的全称是 "椭圆曲线 Diffie-Hellman 临时密钥交换",它是基于椭圆曲线密码学(ECC) + 临时密钥的握手方式,核心特点是:
- 每次握手都会生成临时的公私钥对,用完即弃;
- 支持前向保密:即使服务器长期私钥泄露,历史通信也不会被破解。
二、HTTPS ECDHE 握手全过程(以 TLS 1.2 为例)
我们把握手拆成 6 个关键步骤,清晰还原客户端(比如浏览器)和服务器的每一步操作:
步骤 1:客户端发起请求 → Client Hello
客户端向服务器发送 "握手初始包",包含:
- 支持的 TLS 版本(如 TLS 1.2);
- 支持的加密套件列表(需包含 ECDHE,比如
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384);
- Client Random:客户端生成的随机数 1(后续用于生成会话密钥);
- 支持的椭圆曲线列表(如 secp256r1)和椭圆曲线点格式。
步骤 2:服务器响应 → Server Hello + 证书 + Server Key Exchange
服务器收到请求后,依次返回 3 个关键内容:
- Server Hello:
- 选定的 TLS 版本、加密套件(从客户端列表中选 ECDHE 相关的);
- Server Random:服务器生成的随机数 2;
- 选定的椭圆曲线(如 secp256r1)和点格式。
- 服务器证书:
- 包含服务器的长期公钥(用于后续身份验证),以及 CA 的签名(保证证书合法性)。
- Server Key Exchange(ECDHE 的核心步骤):
- 服务器生成临时私钥 d_server(仅本次握手使用,用完丢弃);
- 基于选定的椭圆曲线基点 G,计算临时公钥 Q_server = d_server ×ばつ G(椭圆曲线点乘);
- 用服务器的长期私钥,对 "椭圆曲线参数 + Q_server + Client Random + Server Random" 做签名(防止临时公钥被篡改);
- 将 "Q_server + 签名" 一起发给客户端。
步骤 3:服务器结束响应 → Server Hello Done
服务器发送 "Server Hello Done",告知客户端:"我的响应内容发完了,请你继续操作"。
步骤 4:客户端处理 → Client Key Exchange + 签名验证
客户端收到服务器的响应后,做两件事:
- 验证签名:
- 用服务器证书里的长期公钥,验证 Server Key Exchange 中的签名,确认 Q_server 确实是服务器生成的(防止中间人伪造)。
- 生成客户端临时密钥:
- 生成临时私钥 d_client(本次握手专用);
- 计算临时公钥 Q_client = d_client ×ばつ G;
- 将 Q_client 发送给服务器(即 Client Key Exchange 包)。
步骤 5:双方生成共享密钥
这一步是 ECDHE 的 "密钥协商核心":
- 客户端计算:共享密钥 = d_client ×ばつ Q_server(椭圆曲线点乘);
- 服务器计算:共享密钥 = d_server ×ばつ Q_client;
由于椭圆曲线点乘满足交换律(d_client ×ばつ (d_serve×ばつG) = d_server ×ばつ (d_clien×ばつG)),双方会得到完全相同的共享密钥。
之后,双方再用 "Client Random + Server Random + 共享密钥",生成最终的会话密钥(用于后续通信的对称加密,比如 AES)。
步骤 6:验证握手完整性 → Finished
为了确保握手过程没被篡改,双方会做最后的验证:
- 客户端将 "所有握手信息的哈希值" 用会话密钥加密,发给服务器(Finished 包);
- 服务器解密后,对比自己计算的哈希值,验证一致则握手有效;
- 服务器同样将 "握手信息哈希值" 加密后发给客户端,客户端验证通过后,握手完成。
三、ECDHE 握手 vs RSA 握手:核心差异对比
我们从 5 个关键维度,对比两者的区别:
| 对比维度 |
ECDHE 握手 |
RSA 握手 |
| 前向保密支持 |
✅ 支持:临时密钥用完即弃,长期私钥泄露不影响历史通信 |
❌ 不支持:依赖服务器长期私钥,泄露则历史通信可被破解 |
| 密钥协商逻辑 |
双方用临时私钥 + 对方临时公钥(椭圆曲线点乘)生成共享密钥 |
客户端用服务器长期公钥加密预主密钥,服务器用长期私钥解密 |
| 服务器私钥作用 |
仅用于 "对临时公钥签名"(身份验证) |
用于 "解密预主密钥 + 签名"(核心解密能力) |
| 性能表现 |
高:椭圆曲线运算高效,256 位 ECC≈2048 位 RSA 的安全强度 |
低:大整数运算耗时,密钥长度需更长 |
| 密钥临时性 |
临时密钥是每次握手随机生成,用完丢弃 |
预主密钥单次,但依赖服务器长期密钥 |
四、HTTPS ECDHE 握手的 Xmind 大纲图
exported_image (5).png
五、总结
ECDHE 握手凭借 "前向保密" 和 "高性能",成了现代 HTTPS 的主流选择 —— 它既解决了 RSA 握手的安全隐患,又能在保证安全的前提下提升通信效率。