Wie @skelwa bereits kommentiert hat, müssen Sie enabledTLSProtocols=TLSv1.2
hinzufügen Konfigurationseigenschaft in der Verbindungszeichenfolge, um Ihr Problem zu lösen.
Eine vollständige Verbindungszeichenfolge für Connector/J könnte so aussehen:
jdbc:mysql://<host>:<port>/<dbname>?enabledTLSProtocols=TLSv1.2
Für r2dbc
Sie müssen tlsVersion=TLSv1.2
verwenden stattdessen.
Bleibt die Frage:
Warum vereinbaren das JDK und MySQL nicht einfach die Verwendung von TLSv1.2
?
Obwohl beide Parteien tatsächlich TLSv1.2 unterstützen, wird das Problem, das Sie hatten, durch das Standardverhalten von Connector/J verursacht. Aus Kompatibilitätsgründen aktiviert Connector/J TLSv1.2 und höher standardmäßig nicht. Daher muss man es explizit aktivieren.
Siehe folgenden Hinweis :
WARNUNG: Bitte beachten Sie, dass Lösungen schlägt vor, jdk.tls.disabledAlgorithms
zu bearbeiten innerhalb von jre/lib/security
ein Sicherheitsrisiko darstellen zu Ihrer Anwendung zu ändern und dort etwas zu ändern, könnte schwerwiegende Auswirkungen haben! Es gibt Gründe, warum diese Protokolle deaktiviert wurden, und man sollte nicht einfach alles oder auch nur Teile aus dieser Liste entfernen.
Hinweis: Wenn Sie mehr Low-Level-Einblicke vom JDK erhalten möchten, um Ihr Problem zu debuggen, können Sie SSL-Debug-Protokolle aktivieren, indem Sie die folgende Konfiguration an den Java-Befehl übergeben:
-Djavax.net.debug=ssl,handshake
oder sogar-Djavax.net.debug=all
In Ihrem Fall sehen Sie so etwas wie:
...(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)
...