如何在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,可以定义有限域参数

最新更新