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