Mysql
 sql >> Base de données >  >> RDS >> Mysql

Pourquoi Java ne peut-il pas se connecter à MySQL 5.7 après la dernière mise à jour du JDK et comment doit-il être corrigé ? (ssl.SSLHandshakeException :aucun protocole approprié)

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