访问我们 Web 服务器的第三方 Web 工具似乎使用的是 Java 6,不支持大于 1024 位的 DH 参数。它无法连接到我们的服务器,因为我们的 dhparams 文件设置为 4096 位。
在Nginx中,在 dhparams 文件中设置nginx.conf
,使用ssl_dhparam
参数。
据推测,如果我们用 1024 位重新生成 dhparams.pem 文件,这会削弱每个人的安全性。
有没有办法让这个旧客户端使用 1024 位 dhparams 进行连接,而其他客户端使用 4096 位 dhparams?更复杂的是,Java 6 似乎不支持 SNI。
有什么好办法可以处理这种情况吗?
答案1
客户端不会在握手中宣布它支持哪种 DH 密钥强度,因此服务器不能对不同的客户端使用不同的 DH 密钥。但是,只有在使用 DH 密码时才会使用 DH 密钥。现代客户端更喜欢 ECDHE,如果您的 nginx 接受此偏好,则握手将根本不使用 DH 参数,因为它不会进行 DHE 密钥交换,而是进行 ECDHE 密钥交换。有关更喜欢 ECDHE 的配置示例,请参阅https://mozilla.github.io/server-side-tls/ssl-config-generator/。
对于没有 SNI 的客户端:它们将仅使用 nginx 中配置的默认主机。因此,如果您有一个适当的证书,该证书与不支持 SNI 的客户端可能用于连接到您的服务器的所有名称相匹配,那么它应该可以正常工作。