2014-04-29 04:57:20 +0000 2014-04-29 04:57:20 +0000
50
50

Włączenie TLS 1.1 i 1.2 dla klientów na Java 7

Java 7 wyłącza TLS 1.1 i 1.2 dla klientów. Od Java Cryptography Architecture Oracle Providers Documentation :

Chociaż SunJSSE w wydaniu Java SE 7 obsługuje TLS 1.1 i TLS 1.2, żadna z tych wersji nie jest domyślnie włączona dla połączeń z klientami. Niektóre serwery nie implementują poprawnie kompatybilności forward i odmawiają rozmów z klientami TLS 1.1 lub TLS 1.2. Jeśli chodzi o interoperacyjność, SunJSSE nie włącza domyślnie TLS 1.1 lub TLS 1.2 dla połączeń z klientami.

Jestem zainteresowany włączeniem protokołów w ustawieniach systemowych (być może poprzez plik konfiguracyjny), a nie rozwiązania dla aplikacji per-Java.

Jak mogę administracyjnie włączyć TLS 1.1 i 1.2 system wide?

Uwaga : ponieważ POODLE, chciałbym administracyjnie wyłączyć SSLv3 system wide. (Problemy z SSLv3 wyprzedziły POODLE'a o co najmniej 15 lat, ale Java/Oracle/Developers nie przestrzegali podstawowych dobrych praktyk, więc użytkownicy tacy jak ty i ja pozostają przy czyszczeniu bałaganu).

  • *

Oto wersja 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)

Odpowiedzi (6)

31
31
31
2015-06-16 08:08:06 +0000

Możesz po prostu dodać następującą właściwość -Dhttps.protocols=TLSv1.1,TLSv1.2, która konfiguruje JVM, aby określić, która wersja protokołu TLS powinna być używana podczas połączeń https.

14
14
14
2014-06-18 16:09:55 +0000

Możesz spróbować dodać do swojego skryptu startowego coś w rodzaju poniższego, zakładając, że 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"

Kilka innych sugestii: https://blogs.oracle.com/java-platform-group/entry/java \8 _will\_use\i0}(https://blogs.oracle.com/java-platform-group/entry/java8willuse_tls)

9
9
9
2014-04-29 08:46:24 +0000

W przypadku Javy 7 w systemie Mac OS X przechodzisz do System Preferences > Java, a Panel sterowania Java otwiera się w osobnym oknie. Następnie przejdź do karty Advanced i przewiń w dół do sekcji Advanced Security Settings oraz zaznacz pola wyboru Use TLS 1.1 i Use TLS 1.2.

8
8
8
2014-11-05 13:12:56 +0000

Niedawno to badałem i chcę dodać - to nie będzie działać dla JDK , właściwości deployment.properties tylko istotne dla Apletów i innych rzeczy działających w JRE.

dla aplikacji JDK (serwer, który musi się łączyć np. z LDAP) serwer jest klientem, ale deployment.security nie będzie działać.

nie można tego zmienić bez napisania jakiegoś kodu jak SSLContext.getInstance(“TLSv1.2”);

4
4
4
2015-06-18 17:42:31 +0000

Wygląda na to, że ustawienia deployment.security.* działają dla programów Java Applets i Java Web Start działających na pulpicie. Jak już wspominali inni, możesz edytować plik deplo.properties, aby to określić.

Oto artykuł, który pokazuje, jak używać polityki grupowej, aby wdrożyć ten sam plik deplo.properties dla wszystkich użytkowników: http://www.darkoperator.com/blog/2013/1/12/pushing-security-configuration-for-java-7-update-10-via-gpo.html

Niestety nie ma możliwości włączenia tej opcji dla wszystkich programów java na komputerze, który bezpośrednio wywołuje plik java.exe lub javaw.exe. Musisz znaleźć każdy program, który korzysta z javy, znaleźć plik konfiguracyjny, w którym określisz parametry, które należy przekazać do javy i zmienić.

Dla Tomcata musieliśmy to przekazać tak, aby połączenia z Tomcata do innych serwerów wykorzystywały TLS 1.1+: -Dhttps.protocols=TLSv1.1,TLSv1.2. W Linuksie można to zrobić edytując bin/catalina.sh lub tworząc bin/setenv.sh.

Nie wiem, co jest potrzebne, aby Tomcat używał tylko TLS 1.2 po stronie serwera. Zaczynamy z Apache HTTP.

1
1
1
2018-07-04 15:02:10 +0000

Jeśli utknąłeś z Javą 7, możesz dodać -Djdk.tls.client.protocols=TLSv1.1,TLSv1.2 do argumentów JVM.

Zauważ, że ma to kilka zastrzeżeń:

Pomimo tych braków uważam, że może to być użyteczne, zwłaszcza gdy protokół, którym jesteśmy zainteresowani używa TLS, ale nie jest HTTPS, np. LDAPS.

[UPDATE] W mojej firmie, która prowadzi swoją pulę serwerów na Ubuntu, zdaliśmy sobie sprawę, że nawet aktualizacja 121 OpenJDK 7 nie wystarczyła do poprawnego zaimplementowania tego rozwiązania. Zaktualizowaliśmy wszystkie serwery, aby zaktualizować 181 zanim zadziałało.