首页/网络/协议速查/密钥交换方式:RSA / DHE / ECDHE

密钥交换方式:RSA / DHE / ECDHE

决定会话密钥怎么产生:RSA 用服务器公钥加密预备主密钥(无前向保密),DHE/ECDHE 用临时 DH 交换(有前向保密,1.3 只剩后者)。

协议速查网络更新于 2026-10-13

密钥交换是什么

密钥交换决定 TLS 会话密钥怎么产生。RSA 密钥传输由客户端用服务器公钥加密预备主密钥,一旦私钥泄露历史流量就能被解密(不具备前向保密),TLS 1.3 已移除该方式;DHE 与 ECDHE 使用一次性的临时密钥协商,用完即扔,具备前向保密,如今是主流选择;PSK 用于会话恢复,安全性取决于预共享密钥的生命周期管理。

基本信息

RSA 密钥传输无前向保密,TLS 1.2 可用,1.3 已移除
DHE临时 DH,具备前向保密,计算较重
ECDHE椭圆曲线临时密钥,主流首选,常用 P-256 与 X25519
PSK预共享密钥,用于会话恢复,需管理密钥生命周期
规范RFC 8446(1.3 的 key_share)、RFC 4492(ECC 套件)
观测方式openssl s_client 输出中的 Server Temp Key

典型使用场景

  • 安全评审:确认线上协商的是 ECDHE 系列而非 RSA 密钥传输
  • 解释「为什么握手要多一次往返」:DHE/ECDHE 与 TLS 1.3 的密钥共享机制相关
  • 排查握手失败:客户端与服务端支持的曲线或套件无交集
  • 国密与合规场景:确认密钥交换算法满足要求
  • 客户端兼容性取舍:为老客户端保留必要套件的同时优先 ECDHE

识别与限制密钥交换方式

识别与限制密钥交换方式
# 查看实际使用的临时密钥类型
openssl s_client -connect example.com:443 </dev/null 2>/dev/null | grep -i 'server temp key'
# 强制用 ECDHE 套件测试两端是否都支持
openssl s_client -cipher 'ECDHE-RSA-AES128-GCM-SHA256' -connect example.com:443 </dev/null >/dev/null && echo ok
# 枚举服务端支持的套件
nmap --script ssl-enum-ciphers -p 443 example.com | head -40
# 指定曲线测试
openssl s_client -connect example.com:443 -groups X25519 </dev/null 2>/dev/null | grep -i curve

方式对比

方式前向保密现状
RSA 密钥传输不具备TLS 1.2 中可用但不推荐,1.3 已移除
DHE具备计算开销较大,实际使用较少
ECDHE具备主流首选,P-256 与 X25519 常用
PSK取决于密钥来源TLS 1.3 会话恢复使用,需评估密钥生命周期
TLS 1.3 把密钥交换与认证拆开:客户端在 ClientHello 里就带上 key_share 预生成公钥,服务器可以直接算出共享密钥,这就是 1.3 能用一次往返完成握手的原因。
ECDHE 的临时密钥每次连接都更换,身份仍由证书私钥签名保证。因此证书私钥泄露后,攻击者可以冒充服务器,但无法解密此前录制的流量——这正是前向保密的价值所在。

易错点

  • 保留 RSA 密钥传输套件导致前向保密失效:一旦私钥泄露,历史流量可被直接解密
  • 以为 TLS 1.3 里还能选 RSA 密钥传输:该方式已被规范移除,配置里出现相关套件说明在协商 1.2
  • 只看服务端配置不验证实际协商结果:中间设备的干预会让实际使用的算法与配置不一致
  • 会话恢复的预共享密钥长期不轮换,使前向保密的实际强度低于预期

数据来源与参考

  • RFC 8446 §4.2.8(key_share)
  • RFC 4492(ECC 套件)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌