Java 7 menonaktifkan TLS 1.1 dan 1.2 untuk klien. Dari Java Cryptography Architecture, Oracle Penyedia Dokumentasi :
Meskipun SunJSSE dalam rilis Java SE 7 mendukung TLS 1.1 dan TLS 1.2, tidak ada versi yang diaktifkan secara default untuk koneksi klien. Beberapa server tidak menerapkan kompatibilitas maju dengan benar dan menolak untuk berbicara dengan klien TLS 1.1 atau TLS 1.2. Untuk interoperabilitas, SunJSSE tidak mengaktifkan TLS 1.1 atau TLS 1.2 secara default untuk koneksi klien.
Saya tertarik untuk mengaktifkan protokol pada pengaturan sistem yang luas (mungkin melalui file konfigurasi), dan bukan solusi per aplikasi Java.
Bagaimana saya secara administratif mengaktifkan TLS 1.1 dan 1.2 sistem yang luas ?
Catatan : sejak POODLE, saya ingin secara administratif menonaktifkan lebar sistem SSLv3. (Masalah dengan SSLv3 mendahului POODLE setidaknya 15 tahun, tetapi Java / Oracle / Developers tidak menghargai praktik terbaik dasar, sehingga pengguna seperti Anda dan saya dibiarkan membersihkan kekacauan).
Ini versi Java:
$ /Library/Java/JavaVirtualMachines/jdk1.7.0_07.jdk/Contents/Home/bin/java -version
java version "1.7.0_07"
Java(TM) SE Runtime Environment (build 1.7.0_07-b10)
Java HotSpot(TM) 64-Bit Server VM (build 23.3-b01, mixed mode)
Jawaban:
Anda bisa menambahkan properti berikut
-Dhttps.protocols=TLSv1.1,TLSv1.2
yang mengkonfigurasi JVM untuk menentukan versi protokol TLS mana yang harus digunakan selama koneksi https.sumber
export JAVA_OPTS="-Dhttps.protocols=TLSv1.1,TLSv1.2"
setenv.sh Tomcat memungkinkan TLSv1 & TLSv2 untuk semua koneksi SSL yang dibuat dari aplikasi di server aplikasi.Anda dapat mencoba menambahkan sesuatu seperti berikut ini ke skrip startup Anda, dengan asumsi Java 1.7:
JAVACMD="$JAVACMD -Ddeployment.security.SSLv2Hello=false -Ddeployment.security.SSLv3=false -Ddeployment.security.TLSv1=false -D\ deployment.security.TLSv1.1=true -Ddeployment.security.TLSv1.2=true"
Beberapa saran lain: https://blogs.oracle.com/java-platform-group/entry/java_8_will_use_tls
sumber
Untuk Java 7 pada Mac OS X, Anda pergi ke
System Preferences > Java
, dan Java Control Panel terbuka di jendela terpisah. Kemudian Anda pergi keAdvanced
tab dan gulir ke bawah keAdvanced Security Settings
bagian dan memeriksaUse TLS 1.1
danUse TLS 1.2
centang.sumber
SSLSocket
(dan saya menganggap ini terjadi pada program Java lainnya), TLS 1.0 diaktifkan (dan TLS 1.1 dan 1.2 tersedia).javac ProtocolTest.java && java ProtocolTest
di terminal. Lihat apa yang muncul di bawah Protokol yang Diaktifkan .Saya baru saja meneliti ini dan saya ingin menambahkan - ini tidak akan bekerja untuk JDK, deployment.properties hanya relevan dengan Applet dan hal-hal lain yang berjalan di JRE.
untuk aplikasi JDK (server yang perlu terhubung ke LDAP misalnya) server adalah klien tetapi deployment.security. tidak akan bekerja
tidak ada cara untuk mengubahnya kecuali Anda menulis beberapa kode seperti SSLContext.getInstance ("TLSv1.2");
sumber
Sepertinya pengaturan deployment.security. * Berfungsi untuk Java Applets dan program Java Web Start yang berjalan di desktop. Seperti yang disebutkan orang lain di sini, Anda dapat mengedit properti deployment.prop untuk menentukan itu.
Berikut ini adalah artikel yang menunjukkan cara menggunakan kebijakan grup untuk menyebarkan file deployment.properties yang sama untuk semua pengguna: http://www.darkoperator.com/blog/2013/1/12/pushing-security-configuration-for- java-7-update-10-via-gpo.html
Sayangnya tidak ada cara untuk mengaktifkannya untuk semua program java di komputer yang secara langsung memanggil java.exe atau javaw.exe. Anda harus menemukan setiap program yang menggunakan java, menemukan file config tempat Anda menentukan parameter untuk diteruskan ke java dan mengubahnya.
Untuk Tomcat kita harus melewati ini sehingga koneksi dari Tomcat ke server lain menggunakan TLS 1.1+:
-Dhttps.protocols=TLSv1.1,TLSv1.2
. Di Linux ini dapat dilakukan dengan mengeditbin/catalina.sh
atau dengan membuatbin/setenv.sh
.Saya tidak tahu apa yang diperlukan untuk membuat Tomcat hanya menggunakan TLS 1.2 di sisi server. Kami depan dengan Apache HTTP.
sumber
Jika Anda terjebak dengan Java 7, Anda bisa menambah
-Djdk.tls.client.protocols=TLSv1.1,TLSv1.2
argumen JVM.Perhatikan bahwa ini memiliki beberapa peringatan:
JAVA_OPTS
), dalam hal ini Anda bergantung pada dukungan envvar di aplikasi Java Anda.Terlepas dari kekurangan ini, saya pikir ini bisa bermanfaat, terutama ketika protokol tertarik menggunakan TLS tetapi bukan HTTPS, misalnya LDAPS.
[PEMBARUAN] Di perusahaan saya, yang menjalankan kumpulan servernya di Ubuntu, kami menyadari bahwa bahkan memperbarui 121 dari OpenJDK 7 tidak cukup untuk mengimplementasikannya dengan benar. Kami telah memperbarui semua server untuk memperbarui 181 sebelum berfungsi.
sumber