Aktivering af TLS v1.2 i Java 7

Java Top

Jeg har lige annonceret det nye Lær foråret kursus med fokus på det grundlæggende i Spring 5 og Spring Boot 2:

>> KONTROLLER KURSEN

1. Oversigt

Når det kommer til SSL-forbindelser, skal vi bruge TLSv1.2. Faktisk er det standard SSL-protokollen til Java 8.

Og mens Java 7 understøtter TLSv1.2, standard er TLS v1.0, som er for svag i disse dage.

I denne vejledning diskuterer vi forskellige muligheder for at konfigurere Java 7 til at bruge TLSv1.2.

2. Brug af Java VM-argumenter

Hvis vi bruger Java 1.7.0_95 eller nyere, kan vi tilføje jdk.tls.client.protocols ejendom som en java kommandolinjeargument til understøttelse af TLSv1.2:

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

Men Java 1.7.0_95 er kun tilgængelig for de kunder, der har købt support fra Oracle. Så vi gennemgår andre muligheder nedenfor for at aktivere TLSv1.2 på Java 7.

3. Brug af SSLSocket

I dette første eksempel aktiverer vi TLSv1.2 ved hjælp af SSLSocketFactory.

Først, vi kan oprette en standard SSLSocketFactory objekt ved at kalde SSLSocketFactory #getDefault fabriksmetode.

Derefter sender vi simpelthen vores vært og havn til SSLSocket #createSocket:

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

Standardindstillingen SSLSocket oprettet ovenfor har ingen SSL-protokoller tilknyttet. Vi kan knytte SSL-protokollerne til vores SSLSocket på et par måder.

I den første tilgang, vi kan videregive en række understøttede SSL-protokoller til setEnabledProtocols metode på vores SSLSocket eksempel:

sslSocket.setEnabledProtocols (ny streng [] {"TLSv1.2"});

Alternativt kan vi bruge SSL-parametreved hjælp af samme array:

SSLParameters params = nye SSLParameters (); params.setProtocols (ny streng [] {"TLSv1.2"}); sslSocket.setSSLParameters (params);

4. Brug af SSLContext

Indstilling af SSLSocket ændrer kun kun den ene forbindelse. Vi kan bruge SSLContext for at ændre den måde, vi skaber SSLSocketFactory.

Så i stedet for at bruge SSLSocketFactory # getInstance, Lad os gøre det SSLContext # getInstance, giver det “TLSv1.2”Som parameter.Vi kan bare få vores SSLSocketFactory fra det nu:

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

Husk altid at bruge det som en hurtig sidebemærkning SecureRandom når du arbejder med SSL.

5. Brug HttpsURLforbindelse

Selvfølgelig opretter vi ikke altid stikkontakter direkte. Ofte er vi på applikationsprotokolniveauet.

Så endelig, lad os se, hvordan du aktiverer TLSv1.2 til HttpsURLforbindelse.

Først skal vi bruge en forekomst af URL. Lad os forestille os, at vi opretter forbindelse til //eksempel.org:

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

Nu kan vi oprette vores SSLContext som før:

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

Derefter er vores sidste trin at oprette forbindelsen og forsyne den med en SSLSocketFactory:

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

6. Konklusion

I denne hurtige artikel viste vi et par måder at aktivere TLSv1.2 på Java 7.

Kodeprøverne, der bruges i denne artikel, er tilgængelige på GitHub.

Java bund

Jeg har lige annonceret det nye Lær foråret kursus med fokus på det grundlæggende i Spring 5 og Spring Boot 2:

>> KONTROLLER KURSEN

$config[zx-auto] not found$config[zx-overlay] not found