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