Java 7 deaktiviert TLS 1.1 und 1.2 für Clients. Aus der Java Cryptography Architecture Oracle Providers-Dokumentation :
Obwohl SunJSSE in Java SE 7 TLS 1.1 und TLS 1.2 unterstützt, ist keine der Versionen standardmäßig für Clientverbindungen aktiviert. Einige Server implementieren die Vorwärtskompatibilität nicht ordnungsgemäß und lehnen die Kommunikation mit TLS 1.1- oder TLS 1.2-Clients ab. Aus Gründen der Interoperabilität aktiviert SunJSSE TLS 1.1 oder TLS 1.2 nicht standardmäßig für Clientverbindungen.
Ich bin daran interessiert, die Protokolle auf einer systemweiten Einstellung (möglicherweise über eine Konfigurationsdatei) und nicht auf einer Java-Anwendungslösung zu aktivieren.
Wie kann ich TLS 1.1 und 1.2 systemweit administrativ aktivieren ?
Hinweis : Seit POODLE möchte ichSSLv3 systemweit administrativ deaktivieren . (Die Probleme mit SSLv3 sind mindestens 15 Jahre älter als POODLE, aber Java / Oracle / Developers haben die grundlegenden Best Practices nicht beachtet, sodass 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)
Antworten:
Sie können einfach die folgende Eigenschaft hinzufügen, mit der
-Dhttps.protocols=TLSv1.1,TLSv1.2
die JVM konfiguriert wird, um anzugeben, welche TLS-Protokollversion bei https-Verbindungen verwendet werden soll.quelle
export JAVA_OPTS="-Dhttps.protocols=TLSv1.1,TLSv1.2"
in Tomcat setenv.sh hinzufügen, werden TLSv1 und TLSv2 für alle SSL-Verbindungen aktiviert, die über Apps auf dem Anwendungsserver hergestellt werden.Sie könnten versuchen, Ihrem Startskript unter der Annahme von Java 1.7 Folgendes hinzuzufügen:
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_use_tls
quelle
Für Java 7 unter Mac OS X wechseln Sie zu
System Preferences > Java
und die Java-Systemsteuerung wird in einem separaten Fenster geöffnet. Dann gehen Sie zu derAdvanced
Registerkarte und scrollen Sie nach unten zu demAdvanced Security Settings
Abschnitt und aktivieren Sie die KontrollkästchenUse TLS 1.1
undUse TLS 1.2
.quelle
SSLSocket
(und ich gehe davon aus, dass dies bei anderen Java-Programmen der Fall ist), ist TLS 1.0 aktiviert (und TLS 1.1 und 1.2 sind verfügbar).javac ProtocolTest.java && java ProtocolTest
in einem Terminal ausführen . Sehen Sie, was unter Aktivierte Protokolle angezeigt wird .Ich habe dies erst kürzlich recherchiert und möchte hinzufügen, dass dies nicht für JDK funktioniert.
Für JDK-Anwendungen (ein Server, der zum Beispiel eine Verbindung zu LDAP herstellen muss) ist der Server ein Client, aber die deployment.security. würde nicht funktionieren.
Sie können es nur ändern, wenn Sie Code wie SSLContext.getInstance ("TLSv1.2") schreiben.
quelle
Es sieht aus wie "deployment.security. *" - Einstellungen funktionieren für Java Applets und Java Web Start-Programme, die auf einem Desktop ausgeführt werden. Wie andere hier erwähnen, können Sie deployment.properties bearbeiten, um dies anzugeben.
In diesem Artikel wird beschrieben, wie mithilfe einer Gruppenrichtlinie dieselbe Datei "deployment.properties" für alle Benutzer bereitgestellt wird: 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 zu aktivieren, der direkt java.exe oder javaw.exe aufruft. 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 hatten wir dies so passieren , dass Verbindungen von Tomcat auf andere Server TLS verwenden 1.1+:
-Dhttps.protocols=TLSv1.1,TLSv1.2
. Unter Linux kann dies durch Bearbeitenbin/catalina.sh
oder Erstellen erfolgenbin/setenv.sh
.Ich weiß nicht, was erforderlich ist, damit Tomcat auf der Serverseite nur TLS 1.2 verwendet. Wir setzen uns mit Apache HTTP auseinander.
quelle
Wenn Sie mit Java 7 nicht weiterkommen, können Sie
-Djdk.tls.client.protocols=TLSv1.1,TLSv1.2
die Argumente der JVM ergänzen .Beachten Sie, dass dies mehrere Einschränkungen hat:
JAVA_OPTS
ist. In diesem Fall sind Sie auf die Unterstützung der envvar in Ihren Java-Anwendungen angewiesen.Trotz dieser Mängel 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 Serverpool unter 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 das Update 181 aktualisiert, bevor es funktioniert hat.
quelle