Рейтинг:0

Как отключить строки в java.security, чтобы избежать javax.net.ssl.SSLHandshakeException?

флаг ng

Мне нужно отключить следующие строки в java.безопасность файл (java 8 SE):

jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, \
   Размер ключа DH < 1024, размер ключа EC < 224, 3DES_EDE_CBC, анон, NULL, \
   включить jdk.disabled.namedCurves

в окнах

Образ в винде.

Путь Windows: Program Files\Java\jre1.8.0_301\lib\security\java.security

Цель отключения этих строк — избежать появления следующего сообщения об ошибке:

Ошибка: javax.net.ssl.SSLHandshakeException: нет соответствующего протокола 
(протокол отключен или наборы шифров не подходят)

И предложение решения опубликовано здесь (то есть прокомментировать эти строки).

Я не уверен, что добавление комментария в начале строки (#) отключит их для обеих операционных систем. Так как этот документ оракула скажем, //

независимо от того, какой из них используется для комментирования строк, я также не знаю, необходимо ли комментировать все 3 строки или просто закомментирование первой отключает все 3. Пример:

Сюда:

# jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, \
   Размер ключа DH < 1024, размер ключа EC < 224, 3DES_EDE_CBC, анон, NULL, \
   включить jdk.disabled.namedCurves

или так?

# jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, \
# DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, \
# включить jdk.disabled.namedCurves

Вопрос:

Как закомментировать (отключить) предыдущие строки в java.безопасность файл в Windows и Linux, чтобы избежать «Ошибка: javax.net.ssl.SSLHandshakeException», или кто-нибудь объяснит мне, есть ли другое решение, отличное от опубликованного

флаг in
Чего вы хотите добиться, отключив эту строку (линии)? Возможно, ваш подход просто неверен или есть более простая альтернатива.
флаг vn
Включение этих сломанных алгоритмов окажет значительное влияние на безопасность.
acgbox avatar
флаг ng
Я знаю и благодарю за разъяснение, однако вопрос не связан с влиянием на безопасность, которое может вызвать отключение этих строк. Вопрос касается только "как правильно отключить эти строки для windows и linux"
dave_thompson_085 avatar
флаг jp
**Да, символ комментария - `#` во всех системах.** Документ, на который вы ссылаетесь, касается файлов _policy_ безопасности для SecurityManager (первоначально разработанного для апплетов и в настоящее время малоиспользуемого); java.security не является файлом политики безопасности. Обратите внимание, что в качестве альтернативы изменению JRE/lib/security/java.security, которое влияет на все JVM, вы можете установить _system property_ `java.security.properties`, чтобы указать на другой (модифицированный) файл отдельно для каждой/любой JVM, например. с `-D` в командной строке, или вы можете вызвать `Security.setProperty()` в вашем коде достаточно близко к началу.
acgbox avatar
флаг ng
@dave_thompson_085, пожалуйста, опубликуйте этот ответ, чтобы выбрать его как правильный. и опубликуйте строки примера, который я дал, прокомментировал, потому что я не знаю, прокомментированы ли первая строка или 3. Спасибо за разъяснения
Рейтинг:1
флаг jp

Да, символ комментария — # во всех системах. Веб-страница, на которую вы ссылаетесь, посвящена файлам политики безопасности для SecurityManager (первоначально разработанного для апплетов и теперь мало используемого); java.security не является файлом политики безопасности.

Да, все 3 строки. Синтаксис продолжения (обратная косая черта-eol) работает только с незакомментированными строками, поэтому, чтобы прокомментировать элемент, продолжающийся на несколько (физических) строк, комментируйте каждую строку.

Однако, поскольку теперь вы ясно даете понять, что ошибка в протоколах, было бы безопаснее удалить только протокол(ы)-нарушитель (почти наверняка TLSv1(.0) и/или TLSv1.1 - SSLv3 был отключен с 8u31 в 2015 году после того, как он был катастрофически нарушен POODLE) и оставить остальные.

Вы случайно не пытаетесь использовать старую версию javamail? Некоторое время существовала (неправильная) функция, которая по умолчанию устанавливала безопасный режим на TLSv1 (.0) (только) и вызывала этот симптом, когда вышли 8u291 и несколько других версий; у нас есть несколько вопросов по этому поводу, просто найдите «javamail без соответствующего протокола». При удалении или уменьшении значения параметра disabledAlgorithms (или регрессии ниже 8u291) клиент сможет пытаться соединение TLS1.0, многие серверы сегодня не принимают его, потому что TLS1.0 считается нарушенным; это Почему Java теперь изменен, чтобы отключить его по умолчанию. В этом случае было бы лучше обновить javamail или же явно настроить почта.{smtp,imap,pop3}.ssl.протоколы до значения, подходящего сегодня, вероятно, TLSv1.2,TLSv1.3.

(Другое) Альтернативы: обычно вместо того, чтобы что-то менять в JRE/lib/security/java.security, которое влияет на все JVM, вы можете установить системное свойство java.security.properties чтобы указать на другой (модифицированный) файл отдельно для каждой/любой JVM, например. с в командной строке, или вы можете позвонить Безопасность.setProperty() в вашем коде достаточно близко к началу.

acgbox avatar
флаг ng
пара вещей: ваш ответ отвечает на мой вопрос, но частично или неполный (это не javamail, а производная от openbravo, называемая unicenta opos). И я хотел бы, чтобы вы могли расширить последнюю часть «(Другие) альтернативы» примером конфигурации, потому что я не могу найти файл `java.security.properties` в папке java. Спасибо
dave_thompson_085 avatar
флаг jp
@acgbox: `java.security.properties` не является именем файла. Как я уже сказал, это _системное свойство_, _value_ которого может быть именем пути (формально URL) файла, который вы создаете, который может быть любым именем в любом месте, которое вы считаете подходящим. Это _описано_ в начале файла java.security; посмотрите там, но обратите внимание, что он показывает только основной способ установки системного свойства с помощью `-D`, тогда как в некоторых средах есть другие способы, отсюда и мой 'например'.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.