基于常见 DH 组的新 Logjam 攻击针对 TLS。此链接建议为每个服务器生成一个新的自定义 2048 位 DH 组。
在使用 SSLEngine 的 Java 服务器代码中,如何设置自定义 DH 组?
预计时间:如果我只使用临时 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密钥的大小。
作为TLS客户端的Java在旧版中不太严格,接受不安全的组。
更新:使用OpenJDK 8U65(JSSE),有一个安全属性jdk.tls.server.defaultDHEParameters
,可以定义有限域参数。
sun.security.provider.ParameterCache
中的硬编码参数集之一,而不是新生成的参数集。过去我无法让JSSE与BC作为原始提供程序配合使用,尽管最近我还没有重新尝试。在所有版本中,JSSE服务器选择DH-512用于导出套件(根据RFC),否则7 或6使用768,8按您指示工作(默认1024,可配置高达2048或768)。 - dave_thompson_085
sun.security.provider.ParameterCache
中共享的 2048 位参数是否安全? - danarmak