如何在Java SSLEngine 中设置自定义DH 组以防止Logjam 攻击?

How to set custom DH group in Java SSLEngine to prevent Logjam attack?

针对 TLS 的新 Logjam 攻击基于普通 DH 组。 This link 建议为每个服务器生成一个新的自定义 2048 位 DH 组。

如何在使用 SSLEngine 的 Java 服务器代码中设置自定义 DH 组?

ETA:如果我只使用临时 DH 密码套件,即名称中带有 DHE 或 ECDHE 而不是 DH 或 ECDH 的套件,我会安全吗?还是这无关?

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 参数。