Som @skelwa redan har kommenterat måste du lägga till enabledTLSProtocols=TLSv1.2
konfigurationsegenskapen i anslutningssträngen för att lösa ditt problem.
En komplett anslutningssträng för Connector/J kan se ut så här:
jdbc:mysql://<host>:<port>/<dbname>?enabledTLSProtocols=TLSv1.2
För r2dbc
du måste använda tlsVersion=TLSv1.2
istället.
Frågan som återstår är:
Varför kommer JDK och MySQL inte bara överens om att använda TLSv1.2
?
Även om båda parter faktiskt stöder TLSv1.2, introduceras problemet du upplevde av standardbeteendet för Connector/J. Av kompatibilitetsskäl aktiverar inte Connector/J TLSv1.2 och högre som standard. Därför måste man aktivera det explicit.
Se följande anteckning :
VARNING: tänk på att lösningar föreslår redigering av jdk.tls.disabledAlgorithms
inuti jre/lib/security
utgör en säkerhetsrisk till din ansökan och att ändra något där kan få allvarliga konsekvenser! Det finns anledningar till att dessa protokoll inaktiverades och man bör inte bara ta bort allt eller ens bara delar från den listan.
Obs! om du vill få mer lågnivåinsikter från JDK för att felsöka ditt problem kan du aktivera ssl-felsökningsloggar genom att skicka följande konfiguration till java-kommandot:
-Djavax.net.debug=ssl,handshake
eller till och med-Djavax.net.debug=all
I ditt fall kommer du att se något som:
...(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)
...