Comme @skelwa l'a déjà commenté, vous devrez ajouter le enabledTLSProtocols=TLSv1.2
propriété de configuration dans la chaîne de connexion pour résoudre votre problème.
Une chaîne de connexion complète pour Connector/J pourrait ressembler à ceci :
jdbc:mysql://<host>:<port>/<dbname>?enabledTLSProtocols=TLSv1.2
Pour r2dbc
vous devrez utiliser tlsVersion=TLSv1.2
à la place.
La question qui reste est :
Pourquoi le JDK et MySQL ne s'accordent-ils pas simplement sur l'utilisation de TLSv1.2
?
Bien que les deux parties prennent en charge TLSv1.2, le problème que vous rencontriez est introduit par le comportement par défaut de Connector/J. Pour des raisons de compatibilité, Connector/J n'active pas TLSv1.2 et supérieur par défaut. Par conséquent, il faut l'activer explicitement.
Voir la remarque :
AVERTISSEMENT : veuillez noter que les solutions suggérant de modifier jdk.tls.disabledAlgorithms
à l'intérieur de jre/lib/security
poser un risque de sécurité à votre application et modifier quoi que ce soit là-bas pourrait avoir de graves implications ! Il y a des raisons pour lesquelles ces protocoles ont été désactivés et il ne faut pas simplement supprimer tout ou même seulement des parties de cette liste.
Remarque : si vous souhaitez obtenir plus d'informations de bas niveau du JDK pour déboguer votre problème, vous pouvez activer les journaux de débogage ssl en transmettant la configuration suivante à la commande java :
-Djavax.net.debug=ssl,handshake
ou même -Djavax.net.debug=all
Dans votre cas, vous verrez quelque chose comme :
...(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)
...