如何验证我是否已使用自定义 2048 位(或 4096 位)dhparams 配置正确设置了 Apache 2.4.6 服务器?
继weakdh.org 系统管理员指南,我用 创建了自己的dhparams.pem
文件openssl dhparam -out dhparams.pem 2048
。指南说用 将其添加到 apache mod_ssl 配置中SSLOpenSSLConfCmd DHParameters "{path to dhparams.pem}"
,但这仅对 Apache >= v2.4.7 有效。我使用的是 CentOS 7,它使用 Apache v2.4.6。
根据这个服务器故障问题,Apache v2.4.6 中的解决方案是将其附加到证书文件中。所以我做了一个cat /etc/pki/dhparam/dhparam.pem >> /etc/letsencrypt/live/openbuildinginstitute.org/cert.pem
(还有 cat /etc/pki/dhparam/dhparam.pem >> /etc/letsencrypt/live/openbuildinginstitute.org/fullchain.pem` && 重新启动了 apache。
但是我如何从客户端(我的浏览器)验证该配置是否有效?
当我们使用 Let's Encrypt 时,这尤其是一个问题,所以我们要确保我们的 90 天证书续订包含此步骤,并且我希望能够从浏览器中验证它。
我已经尝试使用 Firefox 的“查看证书”->“详细信息”->“导出...”下载证书,并确认“-----BEGIN DH PARAMETERS-----”是缺席的从结果文件中。
答案1
您可以使用 wireshark 并监听连接来检查正在使用的确切素数。
- 使用以下方式过滤连接
ssl && ip.addr = <host ip>
- 使用 连接到服务器
openssl s_client -connect <ip or fqdn>:443 -servername <virtual host name> -tls1_2 -cipher DHE
。DHE 很重要,因为 ECDHE 使用不同的方案。 - 检查 wireshark 中的
ServerKeyExchange
。您将获得密钥长度(以字节为单位)和素数。我没有输入 dhparams,因此您可以看到 apache2 使用 Oakley Group 2 素数(RFC 2409)。 - 使用 与您的 DH 文件中的素数进行比较
openssl dhparam -in /path/to/dhparam.pem -noout -text -check
。
答案2
这个超级用户问题提供一个openssl
命令,它将以十六进制输出 ServerKeyExchange,然后您就可以计算出位大小。
这很有帮助,但我更喜欢一个可以从十六进制编码中提取相关数据并仅打印十进制位大小的命令。