Как настроить пользовательскую группу DH в Java SSLEngine для предотвращения атаки Logjam?

Новая атака Logjam на TLS основана на общих группах DH. Эта ссылка рекомендует создать новую настраиваемую 2048-битную группу DH для каждого сервера.

Как установить настраиваемую группу DH в код сервера Java, который использует SSLEngine?

ETA: я был бы в безопасности, если бы использовал только эфемерные комплекты шифрования DH, т.е. с DHE или ECDHE, а не с DH или ECDH от их имени? Или это не связано?

Ответ 1

Java (JCE/JSSE) использует параметры DH из некоторых известных групп DSA. Генератор параметров JCE позволяет создавать группы с размерами от 512 до 1024 бит (или 2048), но реализация JSSE с другой стороны принимает только пользовательские размеры между 1024 и 2048.

Это влияет на то, что вы не можете использовать какие-либо пользовательские размеры, только 1024 или 2048 (с Java 8). Имейте в виду, что Java 7 по-прежнему использует только 768 бит в качестве сервера (или 512 в режиме криптографического экспорта).

Начиная с версии 8 Java-серверы используют по умолчанию 1024 бит. Вы можете увеличить серверную сторону до 2048 бит с помощью jdk.tls.ephemeralDHKeySize=2048. См. Настройка размера эфемерных DH-ключей.

Java как клиент TLS менее строгий в старых версиях и принимает небезопасные группы.

Обновление: с OpenJDK 8U65 (JSSE) существует свойство безопасности jdk.tls.server.defaultDHEParameters, которое может определять параметры конечного поля.