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

TLS 1.1 und 1.2 für Clients auf Java 7

Advertisement

aktivieren Java 7 deaktiviert TLS 1.1 und 1.2 für Clients. Von Java Cryptography Architecture Oracle Providers Documentation :

Obwohl SunJSSE in der Version Java SE 7 TLS 1.1 und TLS 1.2 unterstützt, ist keine der beiden Versionen standardmäßig für Client-Verbindungen aktiviert. Einige Server implementieren die Vorwärtskompatibilität nicht korrekt und weigern sich, mit TLS 1.1- oder TLS 1.2-Clients zu kommunizieren. Aus Gründen der Interoperabilität aktiviert SunJSSE TLS 1.1 oder TLS 1.2 nicht standardmäßig für Client-Verbindungen.

Ich bin daran interessiert, die Protokolle auf einer systemweiten Einstellung (vielleicht durch eine Konfigurationsdatei) zu aktivieren, und nicht an einer Lösung pro Java-Anwendung.

Wie aktiviere ich administrativ TLS 1.1 und 1.2 systemweit?

Anmerkung : seit POODLE möchte ich administrativ SSLv3 deaktivieren systemweit. (Die Probleme mit SSLv3 sind mindestens 15 Jahre älter als POODLE, aber Java/Oracle/Developers haben sich nicht an grundlegende Best Practices gehalten, so dass Benutzer wie Sie und ich das Chaos aufräumen müssen).


Hier ist die Java-Version:

$ /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)
Advertisement
Advertisement

Antworten (6)

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

Sie könnten einfach die folgende Eigenschaft -Dhttps.protocols=TLSv1.1,TLSv1.2 hinzufügen, die die JVM so konfiguriert, dass sie angibt, welche TLS-Protokollversion bei https-Verbindungen verwendet werden soll.

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

Sie könnten versuchen, Ihrem Startskript etwas wie das Folgende hinzuzufügen, wobei Java 1.7 vorausgesetzt wird:

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"

Einige andere Vorschläge: https://blogs.oracle.com/java-platform-group/entry/java_8_will_benutzen_tls

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

Für Java 7 auf Mac OS X gehen Sie zu System Preferences > Java, und das Java Control Panel wird in einem separaten Fenster geöffnet. Dann gehen Sie zur Registerkarte Advanced, scrollen Sie nach unten zum Abschnitt Advanced Security Settings und markieren Sie die Kontrollkästchen Use TLS 1.1 und Use TLS 1.2.

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

Ich habe gerade vor kurzem recherchiert dies, und ich möchte hinzufügen - dies wird nicht für JDK funktionieren, die deployment.properties nur relevant für Applets und andere Dinge, die in der JRE ausgeführt werden.

für JDK-Anwendungen (ein Server, der eine Verbindung zu LDAP zum Beispiel) der Server ist ein Client, aber die deployment.security. würde nicht funktionieren.

keine Möglichkeit, es zu ändern, es sei denn, Sie schreiben einige Code wie SSLContext.getInstance(“TLSv1.2”);

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

Es sieht so aus, als ob die Einstellungen deployment.security.* für Java Applets und Java Web Start-Programme, die auf einem Desktop laufen, funktionieren. Wie andere hier erwähnen, können Sie deployment.properties bearbeiten, um dies festzulegen.

Hier ist ein Artikel, der zeigt, wie eine Gruppenrichtlinie verwendet werden kann, um die gleiche Datei deployment.properties für alle Benutzer bereitzustellen: http://www.darkoperator.com/blog/2013/1/12/pushing-security-configuration-for-java-7-update-10-via-gpo.html

Leider gibt es keine Möglichkeit, dies für alle Java-Programme auf einem Computer einzuschalten, die direkt java.exe oder javaw.exe aufrufen. Sie müssen jedes Programm finden, das java verwendet, die Konfigurationsdatei finden, in der Sie die Parameter angeben, die an java übergeben werden sollen, und sie ändern.

Für Tomcat mussten wir dies so übergeben, dass Verbindungen von Tomcat zu anderen Servern TLS 1.1+ verwenden: -Dhttps.protocols=TLSv1.1,TLSv1.2. Unter Linux kann dies durch Bearbeiten von bin/catalina.sh oder durch Erstellen von bin/setenv.sh erfolgen.

Ich weiß nicht, was nötig ist, damit Tomcat auf der Serverseite nur TLS 1.2 verwendet. Wir beginnen mit Apache HTTP.

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

Wenn Sie mit Java 7 nicht weiterkommen, können Sie -Djdk.tls.client.protocols=TLSv1.1,TLSv1.2 zu den Argumenten der JVM hinzufügen.

Beachten Sie, dass dies mehrere Vorbehalte hat:

Trotz dieser Unzulänglichkeiten denke ich, dass dies nützlich sein könnte, insbesondere wenn das Protokoll, an dem man interessiert ist, TLS verwendet, aber nicht HTTPS ist, z.B. LDAPS.

[UPDATE] In meiner Firma, die ihren Server-Pool auf Ubuntu betreibt, haben wir festgestellt, dass selbst das Update 121 von OpenJDK 7 nicht ausreichte, um dies korrekt zu implementieren. Wir haben alle Server auf Update 181 aktualisiert, bevor es funktionierte.

Advertisement

Verwandte Fragen

8
21
6
10
13
Advertisement