Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Dlaczego Java nie może połączyć się z MySQL 5.7 po ostatniej aktualizacji JDK i jak należy to naprawić? (ssl.SSLHandshakeException:Brak odpowiedniego protokołu)

Jak już skomentował @skelwa, musisz dodać enabledTLSProtocols=TLSv1.2 właściwość konfiguracji w ciągu połączenia, aby rozwiązać problem.

Kompletny ciąg połączenia dla Złącza/J może wyglądać tak:

jdbc:mysql://<host>:<port>/<dbname>?enabledTLSProtocols=TLSv1.2

Dla r2dbc będziesz musiał użyć tlsVersion=TLSv1.2 zamiast tego.

Pozostaje pytanie:

Dlaczego JDK i MySQL nie zgadzają się na używanie TLSv1.2 ?

Chociaż obie strony faktycznie obsługują TLSv1.2, napotkany problem jest spowodowany domyślnym zachowaniem łącznika/J. Ze względu na kompatybilność Connector/J domyślnie nie włącza TLSv1.2 i nowszych. Dlatego należy to wyraźnie włączyć.

Zobacz następującą uwagę :

OSTRZEŻENIE: pamiętaj, że rozwiązania sugerowanie edycji jdk.tls.disabledAlgorithms wewnątrz jre/lib/security stwarzać zagrożenie bezpieczeństwa do aplikacji i zmiana czegokolwiek może mieć poważne konsekwencje! Istnieją powody, dla których te protokoły zostały wyłączone i nie należy po prostu usuwać wszystkiego lub nawet tylko części z tej listy.

Uwaga: jeśli chcesz uzyskać więcej szczegółowych informacji z JDK w celu debugowania problemu, możesz włączyć dzienniki debugowania SSL, przekazując następującą konfigurację do polecenia java:

-Djavax.net.debug=ssl,handshake lub nawet-Djavax.net.debug=all

W twoim przypadku zobaczysz coś takiego:

...(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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pojedyncze zapytanie Mysql dołącz do 3 tabeli i uzyskaj wszystkie wyniki

  2. Skutecznie oczyszczaj tekst wprowadzony przez użytkownika

  3. Tabele bazy danych, im więcej tym lepiej?

  4. Dwa zapytania mysql w jednym obiekcie json

  5. Funkcja MySQL SIN() — zwraca sinus liczby w MySQL