sql >> Base de Datos >  >> RDS >> Mysql

¿Por qué Java no puede conectarse a MySQL 5.7 después de la última actualización de JDK y cómo debería solucionarse? (ssl.SSLHandshakeException:sin protocolo apropiado)

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.

Nota: si desea obtener más información de bajo nivel del JDK para depurar su problema, puede habilitar los registros de depuración de ssl pasando la siguiente configuración al comando java:

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