Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Warum kann Java nach dem neuesten JDK-Update keine Verbindung zu MySQL 5.7 herstellen und wie sollte das behoben werden? (ssl.SSLHandshakeException:Kein geeignetes Protokoll)

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)
    ...