如何在Java SSLEngine中设置自定义DH组以防止Logjam攻击?
对TLS的新Logjam攻击基于常见的DH组。 此链接建议为每个服务器生成一个新的自定义2048位DH组。
如何在使用SSLEngine的Java服务器代码中设置自定义DH组?
ETA:如果我只使用短暂的DH密码套件,即使用DHE或ECDHE而不使用DH或ECDH的密码套件,我会安全吗? 或者这是无关的?
Java(JCE / JSSE)使用来自一些众所周知的DSA组的 DH参数。 JCE参数生成器仅允许生成大小介于512和1024位(或2048)之间的组,但另一方的JSSE实现仅接受1024和2048之间的自定义大小。
这有影响你不能使用任何自定义大小,只有1024或2048(使用Java 8)。 请记住,Java 7仍然只使用768位作为服务器(或512可导出加密模式)。
从版本8开始Java服务器默认使用1024位。 您可以使用jdk.tls.ephemeralDHKeySize=2048
将服务器端增加到2048位。 请参阅自定义临时DH密钥的大小 。
Java作为TLS客户端在旧版本中不那么严格,并且接受不安全的组。
更新:使用OpenJDK 8U65(JSSE),有一个安全属性jdk.tls.server.defaultDHEParameters
,可以定义jdk.tls.server.defaultDHEParameters
-field参数。