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