Mysql
 sql >> Database >  >> RDS >> Mysql

Perché Java non riesce a connettersi a MySQL 5.7 dopo l'ultimo aggiornamento di JDK e come dovrebbe essere risolto? (ssl.SSLHandshakeException:nessun protocollo appropriato)

Come ha già commentato @skelwa, dovrai aggiungere il enabledTLSProtocols=TLSv1.2 proprietà di configurazione nella stringa di connessione per risolvere il problema.

Una stringa di connessione completa per Connector/J potrebbe assomigliare a questo:

jdbc:mysql://<host>:<port>/<dbname>?enabledTLSProtocols=TLSv1.2

Per r2dbc dovrai usare tlsVersion=TLSv1.2 invece.

La domanda che rimane è:

Perché JDK e MySQL non sono d'accordo sull'utilizzo di TLSv1.2 ?

Sebbene entrambe le parti supportino effettivamente TLSv1.2, il problema riscontrato è stato introdotto dal comportamento predefinito di Connector/J. Per motivi di compatibilità, Connector/J non abilita TLSv1.2 e versioni successive per impostazione predefinita. Pertanto, è necessario abilitarlo in modo esplicito.

Vedere la seguente nota :

AVVISO: tieni presente che soluzioni suggerendo di modificare jdk.tls.disabledAlgorithms all'interno di jre/lib/security rappresentano un rischio per la sicurezza alla tua applicazione e la modifica di qualsiasi cosa potrebbe avere gravi implicazioni! Ci sono ragioni per cui quei protocolli sono stati disabilitati e non si dovrebbe semplicemente rimuovere tutto o anche solo parti da quell'elenco.

Nota: se vuoi ottenere informazioni più approfondite di basso livello dal JDK per eseguire il debug del tuo problema, puoi abilitare i log di debug SSL passando la seguente configurazione al comando java:

-Djavax.net.debug=ssl,handshake o anche -Djavax.net.debug=all

Nel tuo caso vedrai qualcosa del tipo:

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