Povolenie protokolu TLS v1.2 v prostredí Java 7

Java Top

Práve som oznámil nové Naučte sa jar kurz zameraný na základy jari 5 a Spring Boot 2:

>> SKONTROLUJTE KURZ

1. Prehľad

Pokiaľ ide o pripojenia SSL, mali by sme používať protokol TLSv1.2. Je to v skutočnosti predvolený protokol SSL pre Java 8.

A hoci Java 7 podporuje TLSv1.2, predvolená hodnota je TLS v1.0, ktorý je v dnešnej dobe príliš slabý.

V tomto tutoriáli sa budeme zaoberať rôznymi možnosťami konfigurácie Java 7 na použitie TLSv1.2.

2. Používanie argumentov Java VM

Ak používame Java 1.7.0_95 alebo novšiu, môžeme pridať jdk.tls.client.protocols majetok ako a java argument príkazového riadku na podporu TLSv1.2:

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

Java 1.7.0_95 je však k dispozícii iba zákazníkom, ktorí si zakúpili podporu od spoločnosti Oracle. Preto preskúmame ďalšie možnosti, aby sme povolili protokol TLSv1.2 v prostredí Java 7.

3. Používanie SSLSocket

V tomto prvom príklade povolíme použitie protokolu TLSv1.2 SSLSocketFactory.

Najprv, môžeme vytvoriť predvolené SSLSocketFactory objekt zavolaním na SSLSocketFactory #getDefault továrenská metóda.

Potom jednoducho odovzdáme hostiteľa a port SSLSocket #createSocket:

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

Predvolená hodnota SSLSocket vytvorený vyššie nemá s tým spojené žiadne protokoly SSL. Môžeme priradiť protokoly SSL k našim SSLSocket niekoľkými spôsobmi.

V prvom prístupe môžeme odovzdať množstvo podporovaných protokolov SSL do servera setEnabledProtocols metóda na našom SSLSocket inštancia:

sslSocket.setEnabledProtocols (nový reťazec [] {"TLSv1.2"});

Prípadne môžeme použiť SSLParametrepomocou rovnakého poľa:

Parametre SSLParameters = nové SSLParameters (); params.setProtocols (nový reťazec [] {"TLSv1.2"}); sslSocket.setSSLParameters (parametre);

4. Používanie SSLContext

Nastavenie SSLSocket priamo mení iba jedno pripojenie. Môžeme použiť SSLContext zmeniť spôsob, akým tvoríme SSLSocketFactory.

Takže namiesto použitia SSLSocketFactory # getInstance, poď robiť SSLContext # getInstance, dávať to “TLSv1.2”Ako parameter.Môžeme len dostať svoje SSLSocketFactory od toho teraz:

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

Ako krátka poznámka vždy nezabudnite na použitie SecureRandom pri práci s SSL.

5. Používanie HttpsURLConnection

Samozrejme, zásuvky nevytvárame vždy priamo. Často sme na úrovni aplikačného protokolu.

Takže konečne sa pozrime, ako povoliť TLSv1.2 HttpsURLConnection.

Najprv budeme potrebovať inštanciu URL. Poďme si predstaviť, že sa pripájame k //example.org:

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

Teraz môžeme nastaviť našu SSLContext ako predtým:

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

Naším posledným krokom je vytvorenie spojenia a jeho dodanie SSLSocketFactory:

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

6. Záver

V tomto rýchlom článku sme si ukázali niekoľko spôsobov, ako povoliť protokol TLSv1.2 v prostredí Java 7.

Ukážky kódu použité v tomto článku sú k dispozícii na GitHub.

Java dole

Práve som oznámil nové Naučte sa jar kurz zameraný na základy jari 5 a Spring Boot 2:

>> SKONTROLUJTE KURZ

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