Karena @skelwa sudah berkomentar, Anda perlu menambahkan enabledTLSProtocols=TLSv1.2
konfigurasi properti di string koneksi untuk menyelesaikan masalah Anda.
String koneksi lengkap untuk Connector/J bisa terlihat seperti ini:
jdbc:mysql://<host>:<port>/<dbname>?enabledTLSProtocols=TLSv1.2
Untuk r2dbc
anda harus menggunakan tlsVersion=TLSv1.2
sebagai gantinya.
Pertanyaan yang tersisa adalah:
Mengapa JDK dan MySQL tidak menyetujui penggunaan TLSv1.2
?
Meskipun kedua pihak benar-benar mendukung TLSv1.2, masalah yang Anda alami disebabkan oleh perilaku default Connector/J. Untuk alasan kompatibilitas, Konektor/J tidak mengaktifkan TLSv1.2 dan lebih tinggi secara default. Oleh karena itu, seseorang harus mengaktifkannya secara eksplisit.
Lihat catatan
PERINGATAN: perlu diketahui bahwa solusi menyarankan pengeditan jdk.tls.disabledAlgorithms
di dalam jre/lib/security
menimbulkan risiko keamanan ke aplikasi Anda dan mengubah apa pun di sana mungkin memiliki implikasi yang parah! Ada alasan mengapa protokol tersebut dinonaktifkan dan seseorang tidak boleh begitu saja menghapus semuanya atau bahkan hanya sebagian dari daftar itu.
Catatan: jika Anda ingin mendapatkan lebih banyak wawasan tingkat rendah dari JDK untuk men-debug masalah Anda, Anda dapat mengaktifkan log debug ssl dengan meneruskan konfigurasi berikut ke perintah java:
-Djavax.net.debug=ssl,handshake
atau bahkan-Djavax.net.debug=all
Dalam kasus Anda, Anda akan melihat sesuatu seperti:
...(HANDSHAKE_FAILURE): Couldn't kickstart handshaking (
"throwable" : {
javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
at java.base/sun.security.ssl.HandshakeContext.<init>(HandshakeContext.java:170)
at java.base/sun.security.ssl.ClientHandshakeContext.<init>(ClientHandshakeContext.java:98)
...