Mengaktifkan TLS v1.2 di Java 7

Java Teratas

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

>> SEMAK KURSUS

1. Gambaran keseluruhan

Dalam hubungan SSL, kita harus menggunakan TLSv1.2. Memang, itu adalah protokol SSL lalai untuk Java 8.

Dan sementara Java 7 menyokong TLSv1.2, lalai adalah TLS v1.0, yang terlalu lemah hari ini.

Dalam tutorial ini, kita akan membincangkan pelbagai pilihan untuk mengkonfigurasi Java 7 untuk menggunakan TLSv1.2.

2. Menggunakan Argumen Java VM

Sekiranya kita menggunakan Java 1.7.0_95 atau lebih baru, kita dapat menambahkan properti jdk.tls.client.protocols sebagai argumen baris perintah java untuk menyokong TLSv1.2:

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

Tetapi Java 1.7.0_95 hanya tersedia untuk pelanggan yang membeli sokongan dari Oracle . Oleh itu, kami akan mengkaji pilihan lain di bawah untuk mengaktifkan TLSv1.2 di Java 7.

3. Menggunakan SSLSocket

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

Pertama, kita boleh membuat objek SSLSocketFactory lalai dengan memanggil kaedah kilang # getDefault SSLSocketFactory .

Kemudian, kami hanya menghantar host dan port kami ke SSLSocket # createSocket :

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

SSLSocket lalai yang dibuat di atas tidak mempunyai protokol SSL yang berkaitan dengannya. Kita boleh mengaitkan protokol SSL dengan SSLSocket kita dengan beberapa cara.

Pada pendekatan pertama, kita dapat menyampaikan pelbagai protokol SSL yang disokong ke kaedah setEnabledProtocols pada contoh SSLSocket kami :

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

Sebagai alternatif, kita boleh menggunakan Parameter SSL , menggunakan susunan yang sama:

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

4. Menggunakan SSLContext

Menetapkan SSLSocket secara langsung mengubah hanya satu sambungan. Kita boleh menggunakan SSLContext untuk mengubah cara kita membuat SSLSocketFactory.

Jadi, daripada menggunakan SSLSocketFactory # getInstance , mari kita lakukan SSLContext # getInstance, memberikannya " TLSv1.2 " sebagai parameter.Kami hanya boleh mendapatkan SSLSocketFactory dari 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 ringkas, selalu ingat untuk menggunakan SecureRandom ketika bekerja dengan SSL.

5. Menggunakan HttpsURLConnection

Sudah tentu, kita tidak selalu membuat soket secara langsung. Sering kali, kita berada di tahap protokol aplikasi.

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

Pertama, kita memerlukan contoh URL . Mari kita bayangkan bahawa kita bersambung ke //example.org:

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

Sekarang, kita dapat menyediakan SSLConteks kita seperti sebelumnya:

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

Kemudian, langkah terakhir kami adalah membuat sambungan dan membekalkannya dengan SSLSocketFactory :

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

6. Kesimpulannya

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

Sampel kod yang digunakan dalam artikel ini terdapat di GitHub.

Bahagian bawah Java

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

>> SEMAK KURSUS