Som @skelwa allerede har kommenteret, skal du tilføje enabledTLSProtocols=TLSv1.2
konfigurationsegenskab i forbindelsesstrengen for at løse dit problem.
En komplet forbindelsesstreng for Connector/J kunne se sådan ud:
jdbc:mysql://<host>:<port>/<dbname>?enabledTLSProtocols=TLSv1.2
Til r2dbc
du skal bruge tlsVersion=TLSv1.2
i stedet.
Spørgsmålet, der står tilbage er:
Hvorfor bliver JDK og MySQL ikke bare enige om at bruge TLSv1.2
?
Selvom begge parter faktisk understøtter TLSv1.2, er det problem, du oplevede, introduceret af standardadfærden for Connector/J. Af kompatibilitetsårsager aktiverer Connector/J ikke TLSv1.2 og højere som standard. Derfor skal man aktivere det eksplicit.
Se følgende note :
ADVARSEL: vær opmærksom på, at løsninger foreslår redigering af jdk.tls.disabledAlgorithms
inde i jre/lib/security
udgør en sikkerhedsrisiko til din ansøgning og ændre noget der kan have alvorlige konsekvenser!Der er grunde til, at disse protokoller blev deaktiveret, og man bør ikke bare fjerne alt eller endda kun dele fra denne liste.
Bemærk: hvis du ønsker at få mere indsigt på lavt niveau fra JDK for at fejlsøge dit problem, kan du aktivere ssl debug logs ved at sende følgende konfiguration til java kommandoen:
-Djavax.net.debug=ssl,handshake
eller endda-Djavax.net.debug=all
I dit tilfælde vil du se noget 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)
...