TLS v1.2 inschakelen in Java 7

Java Top

Ik heb zojuist het nieuwe aangekondigd Leer de lente natuurlijk, gericht op de basisprincipes van Spring 5 en Spring Boot 2:

>> BEKIJK DE CURSUS

1. Overzicht

Als het gaat om SSL-verbindingen, zouden we TLSv1.2 moeten gebruiken. Het is inderdaad het standaard SSL-protocol voor Java 8.

En hoewel Java 7 TLSv1.2 ondersteunt, de standaardwaarde is TLS v1.0, wat tegenwoordig te zwak is.

In deze tutorial bespreken we verschillende opties om Java 7 te configureren om TLSv1.2 te gebruiken.

2. Java VM-argumenten gebruiken

Als we Java 1.7.0_95 of hoger gebruiken, kunnen we de jdk.tls.client.protocols eigendom als een Java opdrachtregelargument ter ondersteuning van TLSv1.2:

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

Maar Java 1.7.0_95 is alleen beschikbaar voor klanten die ondersteuning bij Oracle hebben gekocht. Daarom zullen we hieronder andere opties bekijken om TLSv1.2 op Java 7 in te schakelen.

3. SSLSocket gebruiken

In dit eerste voorbeeld zullen we TLSv1.2 inschakelen met SSLSocketFactory.

Eerste, we kunnen een standaard creëren SSLSocketFactory object door het SSLSocketFactory #getDefault fabrieks methode.

Dan passeren we gewoon onze gastheer en poort naar SSLSocket #createSocket:

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

De standaard SSLSocket hierboven gemaakt heeft geen bijbehorende SSL-protocollen. We kunnen de SSL-protocollen koppelen aan onze SSLSocket op een aantal manieren.

In de eerste benadering, we kunnen een reeks ondersteunde SSL-protocollen doorgeven aan de setEnabledProtocols methode op onze SSLSocket voorbeeld:

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

Als alternatief kunnen we gebruiken SSL-parameters, met dezelfde array:

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

4. SSLContext gebruiken

Instellen van de SSLSocket verandert direct alleen de ene verbinding. We kunnen gebruiken SSLContext om de manier waarop we het SSLSocketFactory.

Dus in plaats van SSLSocketFactory # getInstance, laten we doen SSLContext # getInstance, geven "TLSv1.2”Als parameter.We kunnen gewoon onze SSLSocketFactory vanaf dat moment:

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

Vergeet niet om als een snelle kanttekening altijd te gebruiken SecureRandom bij het werken met SSL.

5. Met behulp van HttpsURLConnection

Natuurlijk maken we niet altijd rechtstreeks contactdozen. Vaak bevinden we ons op het niveau van het toepassingsprotocol.

Laten we tot slot kijken hoe we TLSv1.2 kunnen inschakelen HttpsURLConnection.

Ten eerste hebben we een exemplaar nodig van URL. Laten we ons voorstellen dat we verbinding maken met //example.org:

URL url = nieuwe URL ("//" + hosturl + ":" + poort);

Nu kunnen we onze SSLContext zoals eerder:

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

Vervolgens zijn onze laatste stappen om de verbinding tot stand te brengen en deze te voorzien van een SSLSocketFactory:

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

6. Conclusie

In dit korte artikel hebben we een paar manieren laten zien om TLSv1.2 op Java 7 in te schakelen.

De codevoorbeelden die in dit artikel worden gebruikt, zijn beschikbaar op GitHub.

Java onderkant

Ik heb zojuist het nieuwe aangekondigd Leer de lente natuurlijk, gericht op de basisprincipes van Spring 5 en Spring Boot 2:

>> BEKIJK DE CURSUS