sql >> Databáze >  >> RDS >> Mysql

Proč se Java nemůže připojit k MySQL 5.7 po nejnovější aktualizaci JDK a jak by to mělo být opraveno? (ssl.SSLHandshakeException:Žádný vhodný protokol)

Jak již poznamenal @skelwa, budete muset přidat enabledTLSProtocols=TLSv1.2 konfigurační vlastnost v připojovacím řetězci k vyřešení vašeho problému.

Úplný připojovací řetězec pro Connector/J může vypadat takto:

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

Pro r2dbc budete muset použít tlsVersion=TLSv1.2 místo toho.

Zbývá otázka:

Proč se JDK a MySQL neshodnou na používání TLSv1.2 ?

Ačkoli obě strany skutečně podporují TLSv1.2, problém, se kterým jste se setkali, je způsoben výchozím chováním Connector/J. Z důvodů kompatibility Connector/J ve výchozím nastavení nepovoluje TLSv1.2 a vyšší. Proto je nutné to explicitně povolit.

Viz následující poznámka :

UPOZORNĚNÍ: mějte na paměti, že řešení navrhuje úpravu jdk.tls.disabledAlgorithms uvnitř jre/lib/security představují bezpečnostní riziko do vaší aplikace a změna čehokoli v ní může mít vážné důsledky! Existují důvody, proč byly tyto protokoly zakázány, a neměli byste jednoduše odstranit vše nebo dokonce jen části z tohoto seznamu.

Poznámka: pokud chcete získat více informací o nízké úrovni z JDK pro ladění vašeho problému, můžete povolit protokoly ladění ssl předáním následující konfigurace příkazu java:

-Djavax.net.debug=ssl,handshake nebo dokonce-Djavax.net.debug=all

Ve vašem případě uvidíte něco jako:

...(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. Jak zálohovat databázi postgresql z psql?

  2. opatch prereq

  3. Jak zobrazím seznam všech tabulek ve schématu v Oracle SQL?

  4. Jak funguje pg_sleep_for() v PostgreSQL