Aktivere TLS v1.2 i Java 7

Java Top

Jeg kunngjorde nettopp det nye Lær våren kurs, med fokus på det grunnleggende i vår 5 og vårstøvel 2:

>> KONTROLLER KURSET

1. Oversikt

Når det gjelder SSL-tilkoblinger, bør vi bruke TLSv1.2. Faktisk er det standard SSL-protokollen for Java 8.

Og mens Java 7 støtter TLSv1.2, standard er TLS v1.0, som er for svak i disse dager.

I denne opplæringen vil vi diskutere forskjellige alternativer for å konfigurere Java 7 til å bruke TLSv1.2.

2. Bruke Java VM-argumenter

Hvis vi bruker Java 1.7.0_95 eller nyere, kan vi legge til jdk.tls.client.protocols eiendom som en java kommandolinjeargument for å støtte TLSv1.2:

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

Men Java 1.7.0_95 er bare tilgjengelig for kunder som kjøpte støtte fra Oracle. Så vi vil se på andre alternativer nedenfor for å aktivere TLSv1.2 på Java 7.

3. Bruke SSLSocket

I dette første eksemplet vil vi aktivere TLSv1.2 ved hjelp av SSLSocketFactory.

Først, vi kan opprette en standard SSLSocketFactory objektet ved å ringe SSLSocketFactory #getDefault fabrikkmetode.

Så sender vi ganske enkelt verten og porten til SSLSocket #createSocket:

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

Standaren SSLSocket opprettet ovenfor har ingen SSL-protokoller tilknyttet. Vi kan knytte SSL-protokollene til våre SSLSocket på et par måter.

I den første tilnærmingen, vi kan overføre en rekke støttede SSL-protokoller til setEnabledProtocols metode på vår SSLSocket forekomst:

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

Alternativt kan vi bruke SSL-parametere, ved hjelp av samme matrise:

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

4. Bruke SSLContext

Sette inn SSLSocket endrer direkte bare den ene forbindelsen. Vi kan bruke SSLContext for å endre måten vi lager SSLSocketFactory.

Så, i stedet for å bruke SSLSocketFactory # getInstance, la oss gjøre SSLContext # getInstance, gir det “TLSv1.2”Som parameter.Vi kan bare få vår SSLSocketFactory fra det nå:

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

Husk alltid å bruke det som et raskt sideanmerke SecureRandom når du arbeider med SSL.

5. Bruke HttpsURLConnection

Selvfølgelig lager vi ikke alltid stikkontakter direkte. Ofte er vi på applikasjonsprotokollnivå.

Så til slutt, la oss se hvordan du aktiverer TLSv1.2 på HttpsURLConnection.

Først trenger vi en forekomst av URL. La oss forestille oss at vi kobler til //example.org:

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

Nå kan vi sette opp vårt SSLContext som før:

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

Deretter er våre siste trinn å opprette forbindelsen og forsyne den med en SSLSocketFactory:

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

6. Konklusjon

I denne raske artikkelen viste vi noen måter å aktivere TLSv1.2 på Java 7 på.

Kodeprøvene som brukes i denne artikkelen er tilgjengelige på GitHub.

Java bunn

Jeg kunngjorde nettopp det nye Lær våren kurs, med fokus på det grunnleggende i vår 5 og vårstøvel 2:

>> KONTROLLER KURSET