Rumah > Java > javaTutorial > Bagaimana untuk Membetulkan Pengecualian 'Tidak dapat menjana pasangan kekunci DH' dalam Sambungan SSL Java?

Bagaimana untuk Membetulkan Pengecualian 'Tidak dapat menjana pasangan kekunci DH' dalam Sambungan SSL Java?

Patricia Arquette
Lepaskan: 2024-12-06 10:00:27
asal
639 orang telah melayarinya

How to Fix the

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();
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan