Java 7 wyłącza TLS 1.1 i 1.2 dla klientów. Z architektury architektury kryptograficznej Java Dokumentacja dostawców Oracle :
Chociaż SunJSSE w wersji Java SE 7 obsługuje TLS 1.1 i TLS 1.2, żadna wersja nie jest domyślnie włączona dla połączeń klienckich. Niektóre serwery nie implementują poprawnie zgodności przesyłania dalej i odmawiają rozmowy z klientami TLS 1.1 lub TLS 1.2. W celu zapewnienia interoperacyjności SunJSSE domyślnie nie włącza TLS 1.1 ani TLS 1.2 dla połączeń klienckich.
Interesuje mnie włączenie protokołów w ustawieniach całego systemu (być może poprzez plik konfiguracyjny), a nie rozwiązanie dla aplikacji Java.
Jak administracyjnie włączyć TLS 1.1 i 1.2 w całym systemie ?
Uwaga : od POODLE chciałbym administracyjnie wyłączyć protokół SSLv3 dla całego systemu . (Problemy z SSLv3 poprzedzają POODLE o co najmniej 15 lat, ale Java / Oracle / Developerzy nie przestrzegali podstawowych najlepszych praktyk, więc użytkownicy tacy jak ty i ja muszą sprzątać bałagan).
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:
Możesz po prostu dodać następującą właściwość,
-Dhttps.protocols=TLSv1.1,TLSv1.2
która konfiguruje JVM w celu określenia, która wersja protokołu TLS powinna być używana podczas połączeń https.źródło
export JAVA_OPTS="-Dhttps.protocols=TLSv1.1,TLSv1.2"
w pliku setenv.sh programu Tomcat włącza zarówno TLSv1, jak i TLSv2 dla wszystkich połączeń SSL wykonanych z aplikacji na serwerze aplikacji.Możesz spróbować dodać coś takiego do skryptu uruchamiania, 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_tls
źródło
W przypadku Java 7 w systemie Mac OS X przejdź do
System Preferences > Java
, a Panel sterowania Java zostanie otwarty w osobnym oknie. Następnie przejdź doAdvanced
karty i przewiń w dół doAdvanced Security Settings
sekcji, a następnie zaznacz pola wyboruUse TLS 1.1
iUse TLS 1.2
.źródło
SSLSocket
(i zakładam, że dzieje się tak w przypadku innych programów Java), TLS 1.0 jest włączony (a TLS 1.1 i 1.2 są dostępne).javac ProtocolTest.java && java ProtocolTest
w terminalu. Zobacz, co pojawia się w części Włączone protokoły .Niedawno to zbadałem i chcę dodać - to nie będzie działać dla JDK, deploy.properties dotyczy tylko apletów i innych rzeczy działających w środowisku JRE.
w przypadku aplikacji JDK (serwer, który musi się na przykład łączyć z LDAP), serwer jest klientem, ale security. nie działałoby
nie da się tego zmienić, chyba że napiszesz jakiś kod, taki jak SSLContext.getInstance („TLSv1.2”);
źródło
Wygląda na to, że ustawienia obrazu wdrażania.security. * Działają w przypadku apletów Java i programów Java Web Start działających na pulpicie. Jak wspominają inni, możesz edytować plik depl.properties, aby to określić.
Oto artykuł, który pokazuje, jak użyć zasad grupy do wdrożenia tego samego pliku obrazu wdrażania.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 tego dla wszystkich programów Java na komputerze, który bezpośrednio wywołuje java.exe lub javaw.exe. Musisz znaleźć każdy program korzystający z java, znaleźć plik konfiguracyjny, w którym określasz parametry, które mają zostać przekazane do java, i zmienić go.
Dla Tomcat musieliśmy przekazać to tak, że połączenia z innymi serwerami Tomcat używać TLS 1.1+:
-Dhttps.protocols=TLSv1.1,TLSv1.2
. W systemie Linux można to zrobić przez edycjębin/catalina.sh
lub tworzeniebin/setenv.sh
.Nie wiem, co trzeba zrobić, aby Tomcat używał tylko TLS 1.2 po stronie serwera. Mamy do czynienia z Apache HTTP.
źródło
Jeśli utkniesz w Javie 7, możesz dodać
-Djdk.tls.client.protocols=TLSv1.1,TLSv1.2
do argumentów JVM.Pamiętaj, że ma to kilka zastrzeżeń:
JAVA_OPTS
), w którym to przypadku jesteś zależny od obsługi środowiska envvar w swoich aplikacjach Java.Pomimo tych niedociągnięć, myślę, że może to być przydatne, zwłaszcza gdy protokół, który jest zainteresowany wykorzystaniem TLS, ale nie jest HTTPS, np. LDAPS.
[AKTUALIZACJA] W mojej firmie, która obsługuje swoją pulę serwerów w systemie Ubuntu, zdaliśmy sobie sprawę, że nawet aktualizacja 121 OpenJDK 7 nie była wystarczająca do prawidłowego wdrożenia. Zaktualizowaliśmy wszystkie serwery, aby zaktualizować 181, zanim zadziałało.
źródło