Como @skelwa ya comentó, deberá agregar enabledTLSProtocols=TLSv1.2
propiedad de configuración en la cadena de conexión para resolver su problema.
Una cadena de conexión completa para Connector/J podría verse así:
jdbc:mysql://<host>:<port>/<dbname>?enabledTLSProtocols=TLSv1.2
Para r2dbc
necesitará usar tlsVersion=TLSv1.2
en su lugar.
La pregunta que queda es:
¿Por qué JDK y MySQL simplemente no acuerdan usar TLSv1.2
? ?
Aunque ambas partes realmente admiten TLSv1.2, el problema que estaba experimentando lo presenta el comportamiento predeterminado de Connector/J. Por motivos de compatibilidad, Connector/J no habilita TLSv1.2 y superior de forma predeterminada. Por lo tanto, uno tiene que habilitarlo explícitamente.
Consulte la siguiente nota :
ADVERTENCIA: tenga en cuenta que las soluciones sugiriendo editar jdk.tls.disabledAlgorithms
dentro de jre/lib/security
representar un riesgo de seguridad a su aplicación y cambiar cualquier cosa allí podría tener implicaciones graves. Hay razones por las que esos protocolos se deshabilitaron y uno no debe simplemente eliminar todo o incluso solo partes de esa lista.
-Djavax.net.debug=ssl,handshake
o incluso -Djavax.net.debug=all
En tu caso verás algo como:
...(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)
...