Như @skelwa đã nhận xét, bạn sẽ cần thêm enabledTLSProtocols=TLSv1.2
thuộc tính cấu hình trong chuỗi kết nối để giải quyết vấn đề của bạn.
Chuỗi kết nối hoàn chỉnh cho Trình kết nối / J có thể trông như thế này:
jdbc:mysql://<host>:<port>/<dbname>?enabledTLSProtocols=TLSv1.2
Đối với r2dbc
bạn sẽ cần sử dụng tlsVersion=TLSv1.2
thay vào đó.
Câu hỏi còn lại là:
Tại sao JDK và MySQL không đồng ý về việc sử dụng TLSv1.2
?
Mặc dù cả hai bên thực sự hỗ trợ TLSv1.2, nhưng sự cố bạn đang gặp phải do hoạt động mặc định của Connector / J gây ra. Vì lý do tương thích Trình kết nối / J không bật TLSv1.2 trở lên theo mặc định. Do đó, người ta phải bật nó một cách rõ ràng.
Xem lưu ý :
CẢNH BÁO: xin lưu ý rằng giải pháp đề xuất chỉnh sửa jdk.tls.disabledAlgorithms
bên trong jre/lib/security
gây ra rủi ro bảo mật đối với ứng dụng của bạn và thay đổi bất cứ thứ gì có thể có những tác động nghiêm trọng! Có những lý do khiến các giao thức đó bị vô hiệu hóa và người ta không nên xóa mọi thứ hoặc thậm chí chỉ các phần khỏi danh sách đó.
Lưu ý: nếu bạn muốn có thêm thông tin chi tiết cấp thấp hơn từ JDK để gỡ lỗi sự cố của mình, bạn có thể bật nhật ký gỡ lỗi ssl bằng cách chuyển cấu hình sau vào java comand:
-Djavax.net.debug=ssl,handshake
hoặc thậm chí -Djavax.net.debug=all
Trong trường hợp của bạn, bạn sẽ thấy một cái gì đó như:
...(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)
...