Zoals @skelwa al opmerkte, moet je de enabledTLSProtocols=TLSv1.2
toevoegen configuratie-eigenschap in de verbindingsreeks om uw probleem op te lossen.
Een volledige verbindingsreeks voor Connector/J zou er zo uit kunnen zien:
jdbc:mysql://<host>:<port>/<dbname>?enabledTLSProtocols=TLSv1.2
Voor r2dbc
u moet tlsVersion=TLSv1.2
. gebruiken in plaats daarvan.
De vraag die overblijft is:
Waarom komen de JDK en MySQL niet gewoon overeen om TLSv1.2
te gebruiken ?
Hoewel beide partijen TLSv1.2 daadwerkelijk ondersteunen, wordt het probleem dat u ondervond veroorzaakt door het standaardgedrag van Connector/J. Om compatibiliteitsredenen schakelt Connector/J TLSv1.2 en hoger standaard niet in. Daarom moet je het expliciet inschakelen.
Zie de volgende opmerking :
WAARSCHUWING: houd er rekening mee dat oplossingen suggereert het bewerken van jdk.tls.disabledAlgorithms
binnenkant van jre/lib/security
vormen een beveiligingsrisico aan uw toepassing en het veranderen van iets daar kan ernstige gevolgen hebben! Er zijn redenen waarom die protocollen zijn uitgeschakeld en men moet niet gewoon alles of zelfs maar delen van die lijst verwijderen.
Opmerking: als u meer inzichten op laag niveau van de JDK wilt krijgen om uw probleem op te lossen, kunt u ssl-foutopsporingslogboeken inschakelen door de volgende configuratie door te geven aan het java-commando:
-Djavax.net.debug=ssl,handshake
of zelfs-Djavax.net.debug=all
In jouw geval zie je zoiets als:
...(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)
...