Aktivieren von TLS v1.2 in Java 7

Java Top

Ich habe gerade den neuen Learn Spring- Kurs angekündigt , der sich auf die Grundlagen von Spring 5 und Spring Boot 2 konzentriert:

>> Überprüfen Sie den Kurs

1. Übersicht

Wenn es um SSL-Verbindungen geht, sollten wir TLSv1.2 verwenden. In der Tat ist es das Standard-SSL-Protokoll für Java 8.

Und während Java 7 TLSv1.2 unterstützt, ist der Standard TLS v1.0, der heutzutage zu schwach ist.

In diesem Tutorial werden verschiedene Optionen zum Konfigurieren von Java 7 für die Verwendung von TLSv1.2 erläutert.

2. Verwenden von Java VM-Argumenten

Wenn wir Java 1.7.0_95 oder höher verwenden, können wir die Eigenschaft jdk.tls.client.protocols als Java- Befehlszeilenargument hinzufügen , um TLSv1.2 zu unterstützen:

java -Djdk.tls.client.protocols=TLSv1.2 

Java 1.7.0_95 steht jedoch nur Kunden zur Verfügung, die Support von Oracle erworben haben . Daher werden wir im Folgenden weitere Optionen überprüfen, um TLSv1.2 unter Java 7 zu aktivieren.

3. Verwenden von SSLSocket

In diesem ersten Beispiel aktivieren wir TLSv1.2 mit SSLSocketFactory .

Zunächst können wir ein Standard- SSLSocketFactory- Objekt erstellen, indem wir die Factory-Methode SSLSocketFactory # getDefault aufrufen .

Dann übergeben wir einfach unseren Host und Port an SSLSocket # createSocket :

SSLSocketFactory socketFactory = (SSLSocketFactory) SSLSocketFactory.getDefault(); SSLSocket sslSocket = (SSLSocket) socketFactory.createSocket(hosturl, port);

Dem oben erstellten Standard- SSLSocket sind keine SSL-Protokolle zugeordnet. Wir können die SSL-Protokolle auf verschiedene Arten mit unserem SSLSocket verknüpfen .

Im ersten Ansatz können wir ein Array unterstützter SSL-Protokolle an die setEnabledProtocols- Methode in unserer SSLSocket- Instanz übergeben :

sslSocket.setEnabledProtocols(new String[] {"TLSv1.2"});

Alternativ können wir SSLParameters mit demselben Array verwenden:

SSLParameters params = new SSLParameters(); params.setProtocols(new String[] {"TLSv1.2"}); sslSocket.setSSLParameters(params);

4. Verwenden von SSLContext

Durch direktes Einstellen des SSLSocket wird nur die eine Verbindung geändert. Wir können SSLContext verwenden , um die Art und Weise zu ändern, wie wir die SSLSocketFactory erstellen .

Anstatt also SSLSocketFactory # getInstance zu verwenden , führen wir SSLContext # getInstance aus und geben ihm " TLSv1.2 " als Parameter.Wir können jetzt einfach unsere SSLSocketFactory daraus beziehen :

SSLContext sslContext = SSLContext.getInstance("TLSv1.2"); sslContext.init(null, null, new SecureRandom()); SSLSocketFactory socketFactory = sslContext.getSocketFactory(); SSLSocket socket = (SSLSocket) socketFactory.createSocket(url, port);

Denken Sie als kurze Randnotiz immer daran, SecureRandom zu verwenden, wenn Sie mit SSL arbeiten.

5. Verwenden von HttpsURLConnection

Natürlich erstellen wir Sockets nicht immer direkt. Oft befinden wir uns auf der Ebene des Anwendungsprotokolls.

Lassen Sie uns abschließend sehen, wie Sie TLSv1.2 auf HttpsURLConnection aktivieren .

Zuerst benötigen wir eine URL- Instanz . Stellen wir uns vor, wir verbinden uns mit //example.org:

URL url = new URL("//" + hosturl + ":" + port);

Jetzt können wir unseren SSLContext wie zuvor einrichten :

SSLContext sslContext = SSLContext.getInstance("TLSv1.2"); sslContext.init(null, null, new SecureRandom());

Dann bestehen unsere letzten Schritte darin, die Verbindung herzustellen und sie mit einer SSLSocketFactory zu versorgen :

HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); connection.setSSLSocketFactory(sslContext.getSocketFactory());

6. Fazit

In diesem kurzen Artikel haben wir einige Möglichkeiten gezeigt, wie Sie TLSv1.2 unter Java 7 aktivieren können.

Die in diesem Artikel verwendeten Codebeispiele sind auf GitHub verfügbar.

Java unten

Ich habe gerade den neuen Learn Spring- Kurs angekündigt , der sich auf die Grundlagen von Spring 5 und Spring Boot 2 konzentriert:

>> Überprüfen Sie den Kurs