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)
Ответы:
Вы можете просто добавить следующее свойство,
-Dhttps.protocols=TLSv1.1,TLSv1.2
которое настраивает JVM, чтобы указать, какую версию протокола TLS следует использовать во время соединений https.источник
export JAVA_OPTS="-Dhttps.protocols=TLSv1.1,TLSv1.2"
в Tomcat файла setenv.sh включает оба TLSv1 и TLSv2 для всех соединений SSL, установленных из приложений на сервере приложений.Вы можете попробовать добавить что-то вроде следующего в ваш скрипт запуска, предполагая 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
источник
Для Java 7 в Mac OS X вы переходите
System Preferences > Java
, и панель управления Java открывается в отдельном окне. Затем перейдите наAdvanced
вкладку и прокрутите вниз доAdvanced Security Settings
раздела и проверьтеUse TLS 1.1
иUse TLS 1.2
флажки.источник
SSLSocket
(и я предполагаю, что это происходит с другими программами Java), TLS 1.0 включается (и TLS 1.1 и 1.2 доступны).javac ProtocolTest.java && java ProtocolTest
в терминале. Посмотрите, что отображается в разделе « Включенные протоколы» .Я только недавно исследовал это и хочу добавить - это не будет работать для JDK, deploy.properties, относящихся только к Applets и другим вещам, работающим в JRE.
для приложений JDK (например, сервер, которому необходимо подключиться к LDAP) сервер является клиентом, но развертывание .security. не будет работать.
нет способа изменить его, если вы не напишите некоторый код, такой как SSLContext.getInstance ("TLSv1.2");
источник
Похоже, что параметры deploy.security. * Работают для программ Java Applets и Java Web Start, работающих на рабочем столе. Как и другие упоминают здесь, вы можете отредактировать развертывание. Свойства, чтобы указать это.
Вот статья, в которой показано, как использовать групповую политику для развертывания одного и того же файла 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.
источник
Если вы застряли с Java 7, вы можете добавить
-Djdk.tls.client.protocols=TLSv1.1,TLSv1.2
к аргументам JVM.Обратите внимание, что это имеет несколько предостережений:
JAVA_OPTS
), и в этом случае вы зависите от поддержки envvar в ваших Java-приложениях.Несмотря на эти недостатки, я думаю, что это может быть полезно, особенно когда интересующий вас протокол использует TLS, но не HTTPS, например LDAPS.
[ОБНОВЛЕНИЕ] В моей компании, которая использует свой пул серверов в Ubuntu, мы поняли, что даже обновления 121 OpenJDK 7 было недостаточно для правильной реализации. Мы обновили все серверы до обновления 181, прежде чем он заработал.
источник