Включить TLS 1.1 и 1.2 для клиентов на Java 7

Java 7 отключает TLS 1.1 и 1.2 для клиентов. Из архитектуры криптографии Java Документация поставщиков Oracle :

  

Хотя SunJSSE в выпуске Java SE 7 поддерживает TLS 1.1 и TLS   1.2, ни одна версия не включена по умолчанию для клиентских подключений. Некоторые серверы не обеспечивают правильную совместимость   отказываются разговаривать с клиентами TLS 1.1 или TLS 1.2. Для обеспечения совместимости,   SunJSSE не включает TLS 1.1 или TLS 1.2 по умолчанию для клиента   соединения.

Мне интересно включить протоколы в системной настройке (возможно, через файл конфигурации), а не в решении для Java-приложений.

Как административно включить TLS 1.1 и 1.2 в системной области ?

Примечание : с помощью POODLE я хотел бы административно отключить систему SSLv3 широкий . (Проблемы с SSLv3 предшествуют POODLE не менее чем на 15 лет, но Java /Oracle /Developers не соблюдают базовые рекомендации, поэтому пользователям, таким как вы и я, остается очистка от беспорядка).


Вот версия Java:

$ /Library/Java/JavaVirtualMachines/jdk1.7.0_07.jdk/Contents/Home/bin/java -version
java version "1.7.0_07"
Java(TM) SE Runtime Environment (build 1.7.0_07-b10)
Java HotSpot(TM) 64-Bit Server VM (build 23.3-b01, mixed mode)
41 голос | спросил jww 29 AMpTue, 29 Apr 2014 08:57:20 +040057Tuesday 2014, 08:57:20

6 ответов


28

Вы можете просто добавить следующее свойство -Dhttps.protocols=TLSv1.1,TLSv1.2, которое настраивает JVM, чтобы указать, какая версия протокола TLS должна использоваться во время соединений https.

ответил Tomasz Rebizant 16 J0000006Europe/Moscow 2015, 11:08:06
15

Вы можете попробовать добавить к сценарию запуска что-то вроде следующего: предполагается, что Java 1.7:

JAVACMD="$JAVACMD -Ddeployment.security.SSLv2Hello=false -Ddeployment.security.SSLv3=false -Ddeployment.security.TLSv1=false -D\ deployment.security.TLSv1.1=true -Ddeployment.security.TLSv1.2=true"

Некоторые другие предложения: https://blogs.oracle.com/java- платформа-группа /запись /java_8_will_use_tls

ответил cnst 18 J0000006Europe/Moscow 2014, 20:09:55
8

Недавно я исследовал это, и я хочу добавить - это не сработает для JDK, параметры deployment.properties относятся только к апплетам и другим материалам, работающим в JRE.

для приложений JDK (например, сервер, которому необходимо подключиться к LDAP), сервер является клиентом, а deploy.security. не будет работать.

Невозможно изменить его, если вы не напишете какой-то код, например SSLContext.getInstance («TLSv1.2»);

ответил shlomicthailand 5 32014vEurope/Moscow11bEurope/MoscowWed, 05 Nov 2014 16:12:56 +0300 2014, 16:12:56
6

Для Java 7 в Mac OS X вы переходите к System Preferences > Java, а панель управления Java открывается в отдельном окне. Затем перейдите на вкладку Advanced и прокрутите вниз до Advanced Security Settings и проверьте Use TLS 1.1 и Use TLS 1.2.

введите описание изображения здесь>> </p></body></html>

ответил Spiff 29 PMpTue, 29 Apr 2014 12:46:24 +040046Tuesday 2014, 12:46:24
4

Похоже, что параметры deploy.security. * работают для Java-апплетов и программ Java Web Start, работающих на рабочем столе. Как упоминают другие, вы можете изменить параметры deploy.properties, чтобы указать это.

Вот статья, в которой показано, как использовать групповую политику для развертывания одного и того же файла deploy.properties для всех пользователей: http://www.darkoperator.com/blog/2013/1/12/pushing-security -конфигурации-для-Java-7-обновление-10-через-gpo.html

К сожалению, нет способа включить это для всех java-программ на компьютере, который напрямую вызывает java.exe или javaw.exe. Вы должны найти каждую программу, которая использует java, найти файл конфигурации, в котором вы указываете параметры для перехода к java и изменить его.

Для Tomcat нам пришлось передать это так, чтобы соединения Tomcat с другими серверами использовали TLS 1.1+: -Dhttps.protocols=TLSv1.1,TLSv1.2. В Linux это можно сделать, отредактировав bin/catalina.sh или создав bin/setenv.sh

Я не знаю, что нужно, чтобы Tomcat использовал только TLS 1.2 на стороне сервера. Мы работаем с Apache HTTP.

ответил sjbotha 18 J0000006Europe/Moscow 2015, 20:42:31
0

Если вы застряли в Java 7, вы можете добавить -Djdk.tls.client.protocols=TLSv1.1,TLSv1.2 к аргументам JVM.

Обратите внимание, что это имеет несколько оговорок:

  • Действителен только начиная с версии Java 7 95. Ссылка: https://blogs.oracle.com/java-platform-group/diagnosing-tls,-ssl,-and-https
  • Это не общесистемное решение, хотя оно может быть установлено в переменной среды (например, JAVA_OPTS), в этом случае вы зависите от поддержки envvar в ваших Java-приложениях.

Несмотря на эти недостатки, я думаю, что это может быть полезно, особенно если протокол заинтересован в использовании TLS, но не HTTPS, например. LDAPS.

[UPDATE] В моей компании, которая запускает пул серверов на Ubuntu, мы поняли, что даже обновление 121 OpenJDK 7 было недостаточно для правильной реализации. Мы обновили все серверы, чтобы обновить 181 до того, как они сработали.

ответил AbVog 4 J000000Wednesday18 2018, 18:02:10

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132