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