Como @skelwa já comentou, você precisará adicionar o
enabledTLSProtocols=TLSv1.2
propriedade de configuração na cadeia de conexão para resolver seu problema. Uma string de conexão completa para Connector/J poderia ficar assim:
jdbc:mysql://<host>:<port>/<dbname>?enabledTLSProtocols=TLSv1.2
Para r2dbc você precisará usar
tlsVersion=TLSv1.2
em vez de. A pergunta que fica é:
Por que o JDK e o MySQL simplesmente não concordam em usar
TLSv1.2
? Embora ambas as partes realmente suportem TLSv1.2, o problema que você estava enfrentando é apresentado pelo comportamento padrão do Connector/J. Por motivos de compatibilidade, o Connector/J não habilita o TLSv1.2 e superior por padrão. Portanto, é preciso habilitá-lo explicitamente.
Consulte a seguinte nota :
AVISO: esteja ciente de que
jdk.tls.disabledAlgorithms
dentro de jre/lib/security
representam um risco de segurança ao seu aplicativo e alterar qualquer coisa pode ter implicações graves! Existem razões pelas quais esses protocolos foram desabilitados e não se deve simplesmente remover tudo ou mesmo apenas partes dessa lista. Observação: se você quiser obter mais insights de baixo nível do JDK para depurar seu problema, você pode habilitar logs de depuração ssl passando a seguinte configuração para o comando java:
-Djavax.net.debug=ssl,handshake
ou mesmo-Djavax.net.debug=all
No seu caso, você verá 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)
...