Отключить не-DHE и не ECDHE-шифры в JSSE

У меня есть сервер Winstone под управлением Jenkins в Windows с Java 8. Я пытаюсь убедиться, что если клиентскому запросу не удается указать предпочтительный шифр, сервер предпочитает шифр Диффи-Хеллмана. В отличие от Tomcat, у Winstone нет способа указать список шифров, чтобы упорядочить их. Итак, я пытаюсь отключить не-DHE и не ECDHE-шифры. Я смог удалить некоторые из них, изменив список отключенных алгоритмов в файле java.security, указав минимальный размер ключа и удалив алгоритмы MD2, но не могу отключить все из них. OpenSSL идентифицирует оставшиеся нежелательные алгоритмы шифрования как:

AES128-GCM-SHA256
AES128-SHA256  
AES128-SHA  
EDH-RSA-DES-CBC3-SHA 
DES-CBC3-SHA

В файле java.security я пытался по-разному добавлять фильтры для AES, AES128, None, EDH и DES, но эти алгоритмы все еще отображаются включенными, когда я делаю запрос к серверу. Я также попытался удалить записи после legacyAlgorithms. Кто-нибудь знает, какие значения фильтра будут удалять эти?

фрагмент кода java.security:

jdk.certpath.disabledAlgorithms=MD2, RSA keySize < 1024
jdk.tls.disabledAlgorithms=SSLv3, RC4, SSLv2Hello, TLSv1, TLSv1.1
jdk.tls.legacyAlgorithms= \
    K_NULL, C_NULL, M_NULL, \
    DHE_DSS_EXPORT, DHE_RSA_EXPORT, DH_anon_EXPORT, DH_DSS_EXPORT, \
    DH_RSA_EXPORT, RSA_EXPORT, \
    DH_anon, ECDH_anon, \
    RC4_128, RC4_40, DES_CBC, DES40_CBC

1 ответ

java.policy не делает то, что вы описываете; java.security делает. Но он только отключает или ограничивает отдельные примитивы и AFAICT не может отключить не PFS как класс.

Если вы (можете и хотите) предоставить серверу сертификат ECDSA (т. Е. Сертификат с ключом ECC и знаком KU=), а НЕ сертификат RSA, то с этим сертификатом можно договориться только о шифрах ECDHE-ECDSA. Если вы (также или вместо) даете ему сертификат DSA, с этим сертификатом можно договориться только о шифрах DHE-DSS; это может зависеть от использования вашего собственного центра сертификации или собственной подписи (с его преимуществами и недостатками), поскольку я не нашел ни одного общедоступного центра сертификации, который выдает сертификаты DSA. Java8 по умолчанию использует DHE в 1024-битном общем значении, которое теперь считается пограничным для безопасности, но с помощью системных свойств вы можете изменить это, см. Как увеличить размер ключа DH до 2048 в java 8.

PS: то, что OpenSSL называет "EDH", является DHE в RFC и фактически является алгоритмом DH, а то, что OpenSSL называет "DES-CBC3", действительно является {3DES|3DES-EDE|DESEDE}-CBC; см. Map наборы шифров SSL/TLS и их эквиваленты OpenSSL

Другие вопросы по тегам