44

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)

6 ответов6

30

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

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-platform-group/entry/java_8_will_use_tls

8

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

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

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

8

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

4

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

Вот статья, в которой показано, как использовать групповую политику для развертывания одного и того же файла deploy.properties для всех пользователей: http://www.darkoperator.com/blog/2013/1/12/pushing-security-configuration-for- 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.

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.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .