Anda tidak dapat melakukannya dengan keytool. Pertama, sama keytool
sekali tidak mendukung DH. Kedua, keytool
tidak menghasilkan parameter sendiri untuk algoritma apa pun, hanya privatekey / keypair. Ketiga, ketika keytool
menghasilkan keypair itu juga menghasilkan sertifikat yang ditandatangani sendiri (yang kadang - kadang kemudian digantikan oleh sertifikat yang dikeluarkan CA "nyata") dan tidak mungkin untuk menghasilkan sertifikat yang ditandatangani sendiri untuk DH karena DH tidak menandatangani. Anda bisa menulis program Java yang sangat sederhana (sekitar 10 baris) untuk menghasilkan parameter DH. Tapi itu mungkin tidak akan ada gunanya bagimu karena:
Java tidak menerima parameter DHE di sini. JbossWS (server web Jboss, kemudian Wildfly) adalah garpu Tomcat, dan biasanya menggunakan implementasi Java SSL / TLS, JSSE. Melalui Java 7, JSSE menggunakan parameter DHE-nya sendiri yang 768-bit yang sangat lemah. (Kecuali untuk suite EKSPOR di mana JSSE mematuhi persyaratan RFC untuk DH-512, yang benar-benar rusak, tetapi kemudian suite EKSPOR dengan desain benar-benar rusak, dan dinonaktifkan secara default di Java 7 ke atas.) Java 8 JSSE memungkinkan Anda untuk mengontrol ukuran parameter DHE, tetapi bukan nilai sebenarnya.
Opsi Anda (beberapa tumpang tindih) adalah:
Gunakan Java 8. JSSE di Java 8, tetapi tidak lebih awal, standar DHE ke 1024 bit, yang sebagian besar pihak berwenang menganggap cukup kuat meskipun lemahdh.org tidak, dan memungkinkan Anda untuk menentukan lebih lanjut, lihat https://docs.oracle.com /javase/8/docs/technotes/guides/security/jsse/JSSERefGuide.html#customizing_dh_keys dan untuk latar belakang /programming/30352105/how-to-set-custom-dh-group-in-java -sslengine-untuk-mencegah-logjam-serangan . Perhatikan bahwa jika Anda memiliki klien Java sebelum Java 8, mereka akan gagal jika server menggunakan DHE lebih dari 1024 bit. Saya tidak tahu ada klien lain yang memiliki masalah ini, tetapi uji Anda sebelum melakukan perubahan ini.
Aktifkan ECDHE. JSSE di Java 7 dan yang lebih baru mengimplementasikan ECDHE, yang tidak tunduk pada perhitungan seperti DHE, (biasanya) menggunakan P-256, yang lebih dari cukup kuat. (Meskipun beberapa orang tidak mempercayai salah satu kurva EIST NIST karena NIST secara umum dipengaruhi oleh NSA, meskipun tidak ada sumber terbuka yang saya tahu telah menunjukkan masalah dalam kurva ECC secara khusus.) Java 6 sebenarnya memiliki bagian JSSE untuk ECDHE tetapi ini hanya diaktifkan jika JVM memiliki "penyedia" kripto untuk primitif ECC, yang Java 6 tidak. bcprov - * - jdk15on dari http://www.bouncycastle.org/ adalah penyedia JCE untuk berbagai primitif Java crypto termasuk ECC, jadi jika Anda menambahkan toples ke Anda JRE/lib/ext
dan menambah org.bouncycastle.jce.provider.BouncyCastleProvider
daftar di JRE/lib/security/java.security
(atau melakukan yang sesuaiSecurity.add/insertProvider()
suatu tempat di awal kode Anda) Java 6 dapat melakukan ECDHE. Tentu saja apakah Anda harus memiliki Java 6 yang masih digunakan adalah pertanyaan sendiri.
Beberapa tahun yang lalu, dukungan untuk ECDHE di browser dan klien lain tidak bagus, tetapi hari ini AFAIK semua browser terbaru mendukungnya dan lebih memilihnya daripada DHE - yaitu, browser halo mencantumkan suite ECDHE sebelum suite DHE jadi. bahwa jika server mengimplementasikan keduanya harus memilih ECDHE. Klien non-browser mungkin tidak; Tes untuk memastikan.
Nonaktifkan DHE. Anda dapat mengkonfigurasi daftar cipher dalam atribut Connector untuk mengecualikan cipher DHE; sementara Anda melakukannya juga tidak termasuk staticDH dan staticECDH yang tidak berguna, dan (tunggal) DES dan (semua) "EKSPOR" jika ada (Java 6). Ini berarti browser dan klien yang tidak melakukan ECHDE akan terjebak dengan RSA biasa dan tidak ada Forward Secrecy, tetapi setidaknya mereka memiliki kerahasiaan "saat ini". Saya tidak ingat pasti, tapi saya pikir konfigurasi Connector 5.1 masih di suatu tempat $server/deploy/jbossweb/server.xml
.
Coba yang asli. Tomcat, yang seperti yang saya katakan JbossWS dimulai, memiliki opsi untuk mengimplementasikan HTTPS (SSL / TLS) menggunakan "asli" alias "APR" yang sebenarnya adalah OpenSSL di dalam daripada JSSE. Saya telah sukses campuran dalam mendapatkan opsi ini untuk bekerja di JbossWS, dan tidak ingat tentang 5.1. Jika JbossWS Anda memiliki opsi TC-native yang bisa diterapkan, dan jika JbossWS Anda dapat menangani konfigurasi parameter DH, maka gunakan openssl untuk menghasilkan parameter DH dan instruksi asli JbossWS untuk mengonfigurasinya.