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
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
Petua Tambahan
Jika isu berterusan walaupun menyatakan allowPublicKeyRetrieval=true, cuba langkah tambahan berikut:
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!