Jak już skomentował @skelwa, musisz dodać enabledTLSProtocols=TLSv1.2
właściwość konfiguracji w ciągu połączenia, aby rozwiązać problem.
Kompletny ciąg połączenia dla Złącza/J może wyglądać tak:
jdbc:mysql://<host>:<port>/<dbname>?enabledTLSProtocols=TLSv1.2
Dla r2dbc
będziesz musiał użyć tlsVersion=TLSv1.2
zamiast tego.
Pozostaje pytanie:
Dlaczego JDK i MySQL nie zgadzają się na używanie TLSv1.2
?
Chociaż obie strony faktycznie obsługują TLSv1.2, napotkany problem jest spowodowany domyślnym zachowaniem łącznika/J. Ze względu na kompatybilność Connector/J domyślnie nie włącza TLSv1.2 i nowszych. Dlatego należy to wyraźnie włączyć.
Zobacz następującą uwagę :
OSTRZEŻENIE: pamiętaj, że rozwiązania sugerowanie edycji jdk.tls.disabledAlgorithms
wewnątrz jre/lib/security
stwarzać zagrożenie bezpieczeństwa do aplikacji i zmiana czegokolwiek może mieć poważne konsekwencje! Istnieją powody, dla których te protokoły zostały wyłączone i nie należy po prostu usuwać wszystkiego lub nawet tylko części z tej listy.
Uwaga: jeśli chcesz uzyskać więcej szczegółowych informacji z JDK w celu debugowania problemu, możesz włączyć dzienniki debugowania SSL, przekazując następującą konfigurację do polecenia java:
-Djavax.net.debug=ssl,handshake
lub nawet-Djavax.net.debug=all
W twoim przypadku zobaczysz coś takiego:
...(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)
...