Menyelesaikan masalah 'Tidak dapat menjana pasangan kekunci DH' Pengecualian
Apabila mencuba sambungan SSL dengan pelayan IRC tertentu (terutamanya aperture.esper.net: 6697), Java mungkin menemui "java.lang.RuntimeException: Tidak dapat menjana DH pengecualian keypair", disertai dengan "java.security.InvalidAlgorithmParameterException: Saiz perdana mestilah berbilang 64 dan hanya boleh berjulat dari 512 hingga 1024 (termasuk)".
Punca:
Pengecualian ini berpunca daripada saiz perdana maksimum lalai yang diterima Java untuk DH pasangan kekunci, iaitu 1024 bit. Walau bagaimanapun, pelayan yang memulakan sambungan SSL (dalam kes ini, aperture.esper.net) mungkin cuba merundingkan pasangan kekunci DH dengan saiz utama yang lebih besar.
Penyelesaian:
1. Gunakan Pelaksanaan JCE BouncyCastle:
Seperti yang dicadangkan dalam laporan pepijat JDK-6521495, anda boleh menggunakan pelaksanaan JCE BouncyCastle untuk menggantikan pelaksanaan Java lalai. Pelaksanaan alternatif ini menyokong saiz pasangan kekunci DH yang lebih besar.
2. Naik taraf Versi Java:
Isu ini telah ditangani dalam versi Java terkini. Had saiz perdana maksimum dinaikkan kepada 2048 bit dalam JDK 7044060 dan dialih keluar sepenuhnya (membenarkan saiz melebihi 2048 bit) dalam JDK 8072452. Menaik taraf kepada Java 9 atau lebih baru akan menyelesaikan isu.
Contoh ( menggunakan BouncyCastle):
Security.addProvider(new BouncyCastleProvider()); SSLContext sslContext = SSLContext.getInstance("SSL", "BC"); sslContext.init(null, trustAllCerts, new SecureRandom()); s = (SSLSocket)sslContext.getSocketFactory().createSocket(); s.connect(new InetSocketAddress(host, port), timeout); s.setSoTimeout(0); ((SSLSocket)s).startHandshake();
Nota Tambahan:
Walaupun pelayan yang dimaksudkan, aperture.esper.net, nampaknya salah konfigurasi dari perspektif standard , penyelesaian penyelesaian yang digariskan di atas akan membolehkan aplikasi Java anda berjaya menyambung dan mewujudkan sesi SSL.
Atas ialah kandungan terperinci Bagaimana untuk Membetulkan Pengecualian 'Tidak dapat menjana pasangan kekunci DH' dalam Sambungan SSL Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!