Какой алгоритм набора шифров поддерживается в Jdk11 и какой лучше всего использовать с TLSv1.2

Я запускаю свое приложение JDK8 в среде JDK11. Я использую TLSv1.2 и TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 алгоритм набора шифров, который я подозреваю, что он не поддерживается или отключен в JDK11. Есть список шифров, которые поддерживаются jvm, пожалуйста, обратитесь к https://docs.oracle.com/javase/7/docs/technotes/guides/security/SunProviders.html Также, если вы видите здесь, кто-то перечислил шифр, который поддерживается jdk до jdk1.8 https://developer.ibm.com/answers/questions/301898/where-i-can-find-list-of-cipher-suites-that-suppor/

но я хочу знать, какой алгоритм набора шифров поддерживается / включен / отключен в jdk11. Я использую алгоритм шифрования TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, но когда я пытаюсь запустить свое приложение в среде выполнения jdk 11, я получаю исключение SSLHandshakeException( получение исключения javax.net.ssl.SSLHandshakeException в JDK11). Вот почему я пытаюсь изменить свой алгоритм набора шифров, и для этого я хочу знать, какой алгоритм я могу использовать в среде JDK11. Будет полезно, если я также познакомлюсь с шифрами, которые поддерживаются как jdk11, так и jdk8. Пожалуйста, помогите мне с этим.

Благодарю.

1 ответ

Для пересмотренного Q:

Ваша первая ссылка на (Oracle, и, следовательно, OpenJDK) Java 7, а не 8; Существуют различия в поддержке шифровальных пакетов TLS между 7 и 8, хотя это не влияет на названный вами шифровальный пакет. Ваша ссылка на "до 1.8" предназначена для IBM Java, которая использует различные криптопровайдеры и не является хорошей документацией для криптографии Oracle/OpenJDK. Обратите внимание, что вопрос по этой ссылке, в частности, "... комплекты шифров, которые поддерживаются IBM Java" - НЕ Oracle/OpenJDK Java. Для Oracle/OpenJDK 8 см. https://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html а для 11 см. https://docs.oracle.com/en/java/javase/11/docs/specs/security/standard-names.html. Оба включают TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 и, как и ожидалось, это работает для меня в Oracle 11.0.2, и многочисленные версии 8. Все шифровальные пакеты TLSv1.2, поддерживаемые в 8, все еще поддерживаются в 11, хотя 11 дополнительно поддерживают TLSv1.3 (что вы, очевидно, не поддерживаете с помощью).

Помимо того факта, что, как прокомментировано, настройки Java по умолчанию обычно лучше обеспечивают безопасность, чем переопределения людьми, которые не знают, что они делают, исключение, о котором вы сообщаете в своем другом Q (но не предоставили здесь)

 javax.net.ssl.SSLHandshakeException: Invalid ECDH ServerKeyExchange signature

никоим образом не указывает на то, что указанный вами шифровальный пакет не поддерживается. Во-первых, пожалуйста, уточните, является ли ваше приложение клиентом или сервером TLS - даже если в протоколе приложения нет отношений клиент / сервер, они всегда присутствуют в протоколе TLS; Вот как определяется TLS (и SSL до него). Во-вторых, следуйте стандартным инструкциям для отладки SSL/TLS=JSSE, запустив с системным свойством javax.net.debug=ssl и покажите полученный результат (вероятно, только последние 100 строк или около того, потому что он довольно объемный).


Оригинальный Q был намного более неопределенным и, казалось, был о RC4, но на самом деле это не так.

Текст вашего вопроса не дает никакого представления о том, какой "алгоритм набора шифров" вы имеете в виду, но вы пометили RC4-шифр. Если ваша проблема использует (любой из) наборы шифров, которые включают RC4 в TLS 1.2 или более ранней версии, то вам не следует. RC4 был запрещен для TLS RFC7465 в феврале 2015 года из-за быстрого развития криптоаналитических атак на него. Это относится ко всем версиям протокола TLS, существовавшим в 2015 году (1.0, 1.1 и 1.2), и был реализован всеми поддерживаемыми версиями Java: 8 от 8u60 и выше и все выпуски 9 и выше.

Если вы действительно хотите использовать RC4 и рисковать, кражи ваших данных - возможно, это на самом деле неверно, бессмысленно или иначе бесполезно - либо измените настройку в java.security файл или вызов Security.setProperty в начале вашей программы (до загрузки JSSE); см. Справочное руководство по JSSE, например, для Java11. Обратите внимание, в j8 расположение файла отличается, <JREhome>/lib/security/java.security, См. Также проблему, связанную с RC4, после обновления Java 8.

Если и когда вы (хотите или должны) использовать TLS 1.3, который поддерживает Java 11 и выше, это больше не вариант. TLS 1.3 поддерживает только шифры AEAD (или режимы), которых RC4, как первоначально определено, не имеет, и никакое предложение для конструкции AEAD на основе RC4 сегодня не будет принято.

С другой стороны, если вы просто хотите использовать надежные и безопасные наборы шифров, ничего не меняйте, а просто используйте значения по умолчанию. По умолчанию это значения по умолчанию именно потому, что они безопасны, по крайней мере, насколько известно в настоящее время. Если аналитические достижения изменят это, тогда значения по умолчанию будут изменены соответствующим образом, и ваши программы, использующие их, также будут защищены без необходимости создавать, тестировать, распространять и проверять новые выпуски.

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