Mengaktifkan TLS v1.2 di Java 7

Java Top

Saya baru saja mengumumkan kursus Learn Spring baru , yang berfokus pada dasar-dasar Spring 5 dan Spring Boot 2:

>> LIHAT KURSUSnya

1. Ikhtisar

Ketika datang ke koneksi SSL, kita harus menggunakan TLSv1.2. Memang, ini adalah protokol SSL default untuk Java 8.

Dan meskipun Java 7 mendukung TLSv1.2, defaultnya adalah TLS v1.0, yang terlalu lemah belakangan ini.

Dalam tutorial ini, kita akan membahas berbagai opsi untuk mengkonfigurasi Java 7 untuk menggunakan TLSv1.2.

2. Menggunakan Argumen Java VM

Jika kita menggunakan Java 1.7.0_95 atau yang lebih baru, kita bisa menambahkan properti jdk.tls.client.protocols sebagai argumen baris perintah java untuk mendukung TLSv1.2:

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

Tetapi Java 1.7.0_95 hanya tersedia untuk pelanggan yang membeli dukungan dari Oracle . Jadi, kami akan meninjau opsi lain di bawah ini untuk mengaktifkan TLSv1.2 di Java 7.

3. Menggunakan SSLSocket

Dalam contoh pertama ini, kami akan mengaktifkan TLSv1.2 menggunakan SSLSocketFactory .

Pertama, kita dapat membuat objek SSLSocketFactory default dengan memanggil metode pabrik SSLSocketFactory # getDefault .

Kemudian, kami cukup meneruskan host dan port kami ke SSLSocket # createSocket :

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

SSLSocket default yang dibuat di atas tidak memiliki protokol SSL yang terkait dengannya. Kami dapat mengaitkan protokol SSL ke SSLSocket kami dalam beberapa cara.

Dalam pendekatan pertama, kita dapat meneruskan array protokol SSL yang didukung ke metode setEnabledProtocols pada instance SSLSocket kita :

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

Alternatifnya, kita bisa menggunakan SSLParameters , menggunakan larik yang sama:

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

4. Menggunakan SSLContext

Mengatur SSLSocket secara langsung mengubah hanya satu koneksi. Kita dapat menggunakan SSLContext untuk mengubah cara kita membuat SSLSocketFactory.

Jadi, alih-alih menggunakan SSLSocketFactory # getInstance , mari lakukan SSLContext # getInstance, dengan memberinya " TLSv1.2 " sebagai parameter.Kami hanya bisa mendapatkan SSLSocketFactory kami sekarang:

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

Sebagai catatan singkat, selalu ingat untuk menggunakan SecureRandom saat bekerja dengan SSL.

5. Menggunakan HttpsURLConnection

Tentu saja, kami tidak selalu membuat soket secara langsung. Seringkali, kita berada di level protokol aplikasi.

Jadi, akhirnya, mari kita lihat cara mengaktifkan TLSv1.2 di HttpsURLConnection .

Pertama, kita membutuhkan contoh URL . Mari kita bayangkan bahwa kita terhubung ke //example.org:

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

Sekarang, kita dapat mengatur SSLContext kita seperti sebelumnya:

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

Kemudian, langkah terakhir kami adalah membuat koneksi dan menyediakannya dengan SSLSocketFactory :

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

6. Kesimpulan

Dalam artikel singkat ini, kami menunjukkan beberapa cara untuk mengaktifkan TLSv1.2 di Java 7.

Contoh kode yang digunakan dalam artikel ini tersedia di GitHub.

Jawa bawah

Saya baru saja mengumumkan kursus Learn Spring baru , yang berfokus pada dasar-dasar Spring 5 dan Spring Boot 2:

>> LIHAT KURSUSnya