Omogućavanje TLS v1.2 u Javi 7

Java Top

Upravo sam najavio novo Uči proljeće tečaj, usredotočen na osnove Spring 5 i Spring Boot 2:

>> PROVJERITE TEČAJ

1. Pregled

Što se tiče SSL veza, trebali bismo koristiti TLSv1.2. Zapravo je to zadani SSL protokol za Javu 8.

I dok Java 7 podržava TLSv1.2, zadani je TLS v1.0, koji je danas preslab.

U ovom uputstvu razgovarat ćemo o raznim opcijama za konfiguriranje Jave 7 za upotrebu TLSv1.2.

2. Korištenje Java VM argumenata

Ako koristimo Javu 1.7.0_95 ili noviju, možemo dodati jdk.tls.client.protocols svojstvo kao a Java argument naredbenog retka za podršku TLSv1.2:

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

No Java 1.7.0_95 dostupna je samo kupcima koji su kupili podršku od Oraclea. Dakle, pregledat ćemo druge opcije u nastavku kako bismo omogućili TLSv1.2 na Javi 7.

3. Korištenje SSLSocket-a

U ovom prvom primjeru omogućit ćemo TLSv1.2 pomoću SSLSocketFactory.

Prvi, možemo stvoriti zadani SSLSocketFactory objekt pozivanjem SSLSocketFactory #getDefault tvornička metoda.

Zatim jednostavno prosljeđujemo svog domaćina i port SSLSocket #createSocket:

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

Zadana vrijednost SSLSocket stvoreno gore nema povezanih SSL protokola. SSL protokole možemo povezati s našim SSLSocket na nekoliko načina.

U prvom pristupu, možemo proslijediti niz podržanih SSL protokola na setEnabledProtocols metoda na našem SSLSocket primjer:

sslSocket.setEnabledProtocols (novi niz [] {"TLSv1.2"});

Alternativno, možemo koristiti SSLParameters, koristeći isti niz:

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

4. Korištenje SSLContext-a

Postavljanje SSLSocket izravno mijenja samo jednu vezu. Možemo koristiti SSLContext promijeniti način na koji stvaramo SSLSocketFactory.

Dakle, umjesto korištenja SSLSocketFactory # getInstance, učinimo SSLContext # getInstance, davanje “TLSv1.2”Kao parametar.Jednostavno možemo dobiti svoje SSLSocketFactory od toga sada:

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

Kao kratku napomenu, uvijek se sjetite koristiti SecureRandom pri radu s SSL-om.

5. Korištenje HttpsURLConnection

Naravno, ne stvaramo uvijek utičnice izravno. Često smo na razini protokola prijave.

Pa, konačno, pogledajmo kako omogućiti TLSv1.2 HttpsURLConnection.

Prvo, trebat će nam instanca URL. Zamislimo da se povezujemo na //example.org:

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

Sada možemo postaviti svoj SSLContext kao prije:

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

Zatim su naši posljednji koraci stvaranje veze i opskrba s njom SSLSocketFactory:

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

6. Zaključak

U ovom smo kratkom članku pokazali nekoliko načina kako omogućiti TLSv1.2 na Javi 7.

Uzorci koda korišteni u ovom članku dostupni su na GitHubu.

Dno Java

Upravo sam najavio novo Uči proljeće tečaj, usredotočen na osnove Spring 5 i Spring Boot 2:

>> PROVJERITE TEČAJ