Rumah > pangkalan data > tutorial mysql > Mengapa Aplikasi Java Saya Melemparkan Pengecualian \'Pengambilan Kunci Awam tidak dibenarkan\' Apabila Menyambung ke MySQL?

Mengapa Aplikasi Java Saya Melemparkan Pengecualian \'Pengambilan Kunci Awam tidak dibenarkan\' Apabila Menyambung ke MySQL?

Susan Sarandon
Lepaskan: 2024-11-01 09:08:30
asal
448 orang telah melayarinya

Why Does My Java Application Throw a

Java Sambungan - MySQL: Menyelesaikan masalah Pengecualian "Pengambilan Kunci Awam tidak dibenarkan"

Apabila cuba mewujudkan sambungan ke pangkalan data MySQL menggunakan penyambung Java 8.0.11, pembangun mungkin menghadapi pengecualian "Pengambilan Kunci Awam tidak dibenarkan". Ralat ini timbul semasa proses jabat tangan sambungan dan menandakan bahawa klien (aplikasi Java) tidak dibenarkan untuk mendapatkan kunci awam daripada pelayan untuk pengesahan.

Punca Pengecualian

Pengecualian berlaku apabila aplikasi Java cuba mendapatkan semula kunci awam pelayan, yang digunakan untuk menyulitkan dan menghantar maklumat sensitif seperti kata laluan pengguna. Secara lalai, MySQL tidak membenarkan pengambilan kunci awam untuk menghalang kemungkinan serangan man-in-the-middle (MITM).

Penyelesaian

Untuk menyelesaikan isu ini, aplikasi Java mesti dikonfigurasikan secara eksplisit untuk membenarkan pengambilan kunci awam apabila mewujudkan sambungan pangkalan data. Ini boleh dicapai dengan menentukan parameter allowPublicKeyRetrieval=true sebagai sebahagian daripada rentetan sambungan JDBC.

Berikut ialah contoh rentetan sambungan JDBC yang termasuk parameter allowPublicKeyRetrieval:

jdbc:mysql://localhost:3306/db?allowPublicKeyRetrieval=true
Salin selepas log masuk

Perhatikan bahawa mendayakan pengambilan kunci awam menimbulkan potensi risiko keselamatan dengan menjadikan klien terdedah kepada serangan MITM jika sambungan tidak melalui saluran selamat (cth., HTTPS). Untuk tujuan pembangunan dan ujian, mungkin lebih selamat untuk melumpuhkan SSL dan nyatakan useSSL=false secara eksplisit dalam rentetan sambungan:

jdbc:mysql://localhost:3306/db?allowPublicKeyRetrieval=true&useSSL=false
Salin selepas log masuk

Petua Tambahan

Jika isu berterusan walaupun menyatakan allowPublicKeyRetrieval=true, cuba langkah tambahan berikut:

  • Pastikan konfigurasi SSL/TLS pelayan MySQL dikonfigurasikan dengan betul.
  • Sahkan bahawa aplikasi Java menggunakan yang terkini versi penyambung MySQL JDBC.
  • Lumpuhkan tembok api (sementara) untuk menghapuskan sebarang sekatan berkaitan rangkaian.
  • Mulakan semula perkhidmatan MySQL untuk memastikan sambungan yang bersih.

Atas ialah kandungan terperinci Mengapa Aplikasi Java Saya Melemparkan Pengecualian \'Pengambilan Kunci Awam tidak dibenarkan\' Apabila Menyambung ke MySQL?. 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