首页/安全/加密与证书速查/openssl dhparam 与 DHE 参数

openssl dhparam 与 DHE 参数

dhparam 生成 DH 参数文件供有限域 DH(DHE)套件使用,生成耗时随位数增加;现代部署更倾向优先 ECDHE,需要 DHE 时使用 RFC 7919 定义的标准群。

加密与证书速查安全更新于 2026-10-13

dhparam 是干什么的

dhparam 用来生成有限域 DH(DHE)参数文件,供那些使用 DHE 套件的服务端加载。生成过程要搜索安全素数,位数越大耗时越长,2048 位在普通机器上就可能要几分钟。现在的实践更倾向优先使用 ECDHE,需要 DHE 时直接用 RFC 7919 定义的命名群(FFDHE)即可,不必自己生成参数——TLS 1.3 更是取消了自定义 DH 参数,只允许命名群。

基本信息

生成openssl dhparam -out dhparam.pem 2048(耗时较长)
查看openssl dhparam -in dhparam.pem -text -noout 的前几行即位数
复用同一套参数可被多站点复用,不必重复生成
推荐做法优先 ECDHE;需要 DHE 时使用 RFC 7919 命名群
nginx 配置ssl_dhparam 指向参数文件
TLS 1.3只允许命名群,自定义参数不再参与协商

典型使用场景

  • 兼容老旧客户端:少数只支持 DHE 的客户端需要服务端具备 DH 参数。
  • 安全基线整改:清理仍在使用的 1024 位参数。
  • 能力排查:确认某台 nginx 的 DHE 套件是否真的可用。
  • 性能对比:DH 参数越大握手越慢,需要与兼容性权衡。
  • 迁移评估:从自建参数切到命名群前,先确认两端都支持。

生成与配置

生成与配置
# 生成 2048 位参数(后台跑,耗时可能数分钟)
openssl dhparam -out /etc/nginx/dhparam.pem 2048
# 确认参数位数
openssl dhparam -in /etc/nginx/dhparam.pem -text -noout | head -1
# nginx 中引用:ssl_dhparam /etc/nginx/dhparam.pem;
# 生成后先 nginx -t 再 reload,避免配置错误导致服务起不来

位数与取舍

位数生成耗时量级适用判断
1024数秒已低于当前实践要求,应替换
2048数分钟当前常见最低要求
3072 及以上明显更长握手开销上升,非必要不用
命名群(FFDHE)无需生成首选方案,实现内置且互操作性好
生成参数会占用 CPU 且耗时长,建议离线生成一次并在多台服务器间复用同一文件;换成 ECDHE 优先的配置后,这份文件更多只是兼容保留。
生成完成后建议做一次参数校验再投入配置:OpenSSL 1.1.0 起 dhparam 提供 -check 选项,可在 reload 之前发现文件被截断或格式损坏的问题。
位数选择要看两端的实际支持:部分老旧客户端不认 3072 位以上的自定义参数,出现握手失败时先在测试环境用 s_server 复现,再决定降到 2048 位还是改走命名群。

易错点

  • 继续使用 1024 位参数:已不满足当前安全要求,测评时会被判为高风险项。
  • 每次部署都重新生成:浪费资源,不同机器参数不一致还会增加排障复杂度。
  • 把生成动作放进容器启动脚本或部署流水线:耗时与随机数质量不可控,可能显著拖慢启动甚至卡住发布。
  • 生成后直接重启服务而不先校验配置:参数文件路径或格式错误会让服务启动失败。
  • 以为 DH 参数越大越安全:位数翻倍带来明显的握手 CPU 开销,且仍不及 ECDHE 的性价比。

数据来源与参考

  • RFC 7919(协商 FFDHE 群)
  • OpenSSL 官方文档(dhparam)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌