sql >> Databasteknik >  >> RDS >> Mysql

Varför kan Java inte ansluta till MySQL 5.7 efter den senaste JDK-uppdateringen och hur ska det fixas? (ssl.SSLHandshakeException:Inget lämpligt protokoll)

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


  1. PDO fetchAll grupperar nyckel-värdepar i assoc-array

  2. Mysql::Fel:Angiven nyckel var för lång; max nyckellängd är 1000 byte

  3. Hitta städer inom "X" kilometer (eller mil)

  4. Välj alla rader som har minst en lista med funktioner