Както @skelwa вече коментира, ще трябва да добавите enabledTLSProtocols=TLSv1.2
конфигурационното свойство в низа за връзка, за да разрешите проблема си.
Пълен низ за връзка за Connector/J може да изглежда така:
jdbc:mysql://<host>:<port>/<dbname>?enabledTLSProtocols=TLSv1.2
За r2dbc
ще трябва да използвате tlsVersion=TLSv1.2
вместо това.
Въпросът, който остава, е:
Защо JDK и MySQL просто не се споразумеят за използването на TLSv1.2
?
Въпреки че и двете страни действително поддържат TLSv1.2, проблемът, който изпитвате, е въведен от поведението по подразбиране на Connector/J. От съображения за съвместимост Connector/J не активира TLSv1.2 и по-високи по подразбиране. Следователно, човек трябва да го активира изрично.
Вижте следната забележка :
ПРЕДУПРЕЖДЕНИЕ: моля, имайте предвид, че решения предлага редактиране на jdk.tls.disabledAlgorithms
вътре в jre/lib/security
представляватриск за сигурността към вашето приложение и промяната на нещо там може да има сериозни последици! Има причини, поради които тези протоколи са били деактивирани и човек не трябва просто да премахва всичко или дори само части от този списък.
Забележка: ако искате да получите по-ниско ниво на прозрения от JDK за отстраняване на грешки, можете да активирате ssl регистрационните файлове за отстраняване на грешки, като предадете следната конфигурация на java командата:
-Djavax.net.debug=ssl,handshake
или дори-Djavax.net.debug=all
Във вашия случай ще видите нещо като:
...(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)
...