必须运行apache 2.4.8+且openssl ≥1.0.2,生成2048位dh参数文件并用sslopensslconfcmd dhparameters指定其绝对路径,配置须置于启用sslengine on的https虚拟主机内。

要在 Apache 中通过 mod_ssl 使用 SSLOpenSSLConfCmd 自定义 Diffie-Hellman 参数,核心前提是:你必须运行的是 Apache 2.4.8 及以上版本,且底层 OpenSSL 版本为 1.0.2 或更新。低于这个组合的环境不支持该指令,需改用证书文件追加等兼容方式。
生成强 DH 参数文件
现代浏览器已弃用 1024 位 DH 组,强制要求至少 2048 位。推荐直接生成 2048 位参数:
- 执行命令:
openssl dhparam -out /etc/ssl/private/dhparams.pem 2048 - 路径建议放在私钥目录(如
/etc/ssl/private/),便于权限统一管理 - 确保 Apache 进程用户(如
www-data或apache)对该文件有读取权限:sudo chmod 600 /etc/ssl/private/dhparams.pem
在 Apache 配置中启用 SSLOpenSSLConfCmd
该指令需写入启用 HTTPS 的虚拟主机块(<virtualhost></virtualhost>)或全局 SSL 配置段中,不能放在普通 HTTP 虚拟主机里:
- 添加配置行:
SSLOpenSSLConfCmd DHParameters "/etc/ssl/private/dhparams.pem" - 注意路径必须是绝对路径,且与实际文件位置完全一致
- 该指令仅作用于当前作用域(如某虚拟主机),若多个站点共用同一组 DH 参数,可放在全局 ssl.conf 中
验证是否生效
配置完成后需重启 Apache,并通过 TLS 工具确认 DH 参数已被正确加载:
- 重启服务:
sudo systemctl restart apache2(Debian/Ubuntu)或sudo systemctl restart httpd(RHEL/CentOS) - 检查错误日志:
sudo tail -f /var/log/apache2/error.log,确认无SSLOpenSSLConfCmd解析失败提示 - 用
openssl s_client -connect yourdomain.com:443 -cipher "DHE"测试,观察返回中的Server Temp Key行是否显示2048 bit - 也可使用在线工具如 SSL Labs 的 Server Test,查看 “Key Exchange” 一栏是否显示 DH 参数强度为 2048 位
常见问题处理
如果配置后未生效,优先排查以下几点:
- Apache 版本是否 ≥ 2.4.8?运行
apache2 -v或httpd -v确认 - OpenSSL 版本是否 ≥ 1.0.2?运行
openssl version查看 - 配置是否写在了正确的上下文(必须是启用了
SSLEngine on的 HTTPS 虚拟主机内) - DH 文件路径是否存在、权限是否正确、内容是否为 PEM 格式(以
-----BEGIN DH PARAMETERS-----开头)











