sql >> Database teknologi >  >> RDS >> Mysql

Hvorfor kan Java ikke oprette forbindelse til MySQL 5.7 efter den seneste JDK-opdatering, og hvordan skal det rettes? (ssl.SSLHandshakeException:Ingen passende protokol)

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


  1. Mysql-tabel med sammensat indeks, men ikke primær nøgle

  2. Sammenligning af DBaaS-failoverløsninger med manuelle gendannelsesindstillinger

  3. Kontrollerer flere kolonner for én værdi

  4. hvordan man får en enkelt værdi fra array i codeigniter