DH 解决了什么
Diffie-Hellman 让双方在不安全信道中各自算出一个相同的共享密钥,旁观者即使录下全部交换的数据也算不出来。它本身不验证对方是谁——身份由证书与签名负责,两件事配合才是完整的密钥交换。
临时与静态的区别
只有临时密钥(DHE、ECDHE,每次会话重新生成)才提供前向保密:即使服务器的长期私钥日后泄露,攻击者也解不开此前录下的流量。ECDHE 参数更短更快,是现代默认选择;有限域 DHE 需要足够大的素数(2048 位以上),弱参数会带来 Logjam 类风险(RFC 7919)。
基本信息
| DHE | 有限域 DH,参数为素数模数,要求 2048 位以上 |
|---|---|
| ECDHE | 椭圆曲线 DH,更快更短,现代首选 |
| 前向保密 | 只有每次会话新建密钥对的临时方式才具备 |
| 规范 | RFC 7919 定义了标准化的有限域参数组 |
典型使用场景
- 检查服务端是否提供前向保密
- 兼容老客户端时判断是否还需保留有限域 DHE 套件
- 排查从网上抄来的弱参数隐患
- 对照合规基线提出密钥交换要求
检查与生成参数
检查与生成参数
openssl s_client -connect example.com:443 -cipher 'DHE-RSA-AES128-GCM-SHA256' </dev/null 2>/dev/null | grep -i 'server temp key'
openssl s_client -connect example.com:443 </dev/null 2>/dev/null | grep -i 'server temp key' # 默认协商的密钥类型与强度
openssl dhparam -out dh2048.pem 2048 # 仅在需要兼容有限域 DHE 时生成,耗时较久三种密钥交换
| 方式 | 是否前向保密 | 说明 |
|---|---|---|
| ECDHE | 是 | 现代默认,性能与安全性兼顾 |
| DHE | 是 | 需 2048 位以上参数,性能较差 |
| 静态密钥交换 | 否 | 长期私钥一旦泄露,历史流量可被解密 |
使用 ECDHE 时无需另外手工生成 dhparam;只有为了兼容老客户端保留有限域 DHE 套件才需要生成。
直接复制网络上的 1024 位 dhparam 是历史事故的源头。要么只用 ECDHE,要么使用 RFC 7919 定义的标准参数组。
换用 ECDHE 之后,dhparam 文件不再影响新的握手,但保留旧文件并不会带来风险;真正需要清理的是仍然启用弱参数的那部分套件配置。