2015-12-09 31 views
172

Con le due classi seguenti, ho provato a connettermi a un database MySQL. Tuttavia, ho sempre arrivare questo errore:Avviso sulla connessione SSL durante la connessione al database MySQL

Wed Dec 09 22:46:52 CET 2015 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.

Questa è la classe di test con il metodo main:

public class TestDatabase { 

    public static void main(String[] args) { 
     Database db = new Database(); 
     try { 
      db.connect(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     db.close(); 
    } 
} 

Questa è la classe Database:

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.SQLException; 

public class Database { 

    private Connection con; 

    public void connect() throws Exception{ 

     if(con != null) return; 

     try { 
      Class.forName("com.mysql.jdbc.Driver"); 
     } catch (ClassNotFoundException e) { 
      throw new Exception("No database"); 
     } 

     String connectionURL = "jdbc:mysql://localhost:3306/Peoples"; 

     con = DriverManager.getConnection(connectionURL, "root", "milos23");   
    } 

    public void close(){ 
     if(con != null){ 
      try { 
       con.close(); 
      } catch (SQLException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
} 
+1

Grazie per la risposta, il suo ok, ho appena fatto sapere che ho bisogno di mettere ssl = true o false sulla fine del mio String connectionURL. – Milos86

+0

grazie, quindi com'è la nuova connectionURL? – user3290180

+3

Non è un errore, è un avvertimento. –

risposta

354

L'URL di collegamento dovrebbe essere come il seguente,

jdbc:mysql://localhost:3306/Peoples?autoReconnect=true&useSSL=false 

Ciò disabiliterà SSL e sopprimerà anche gli errori SSL.

+0

upvoted. Ma la stringa dell'URL dovrebbe ora terminare con il punto e virgola. – DevilInDisguise

+25

in jdbc la stringa di connessione NON DEVE terminare con i due punti del colon – Amith

+6

nel file di contesto tomcat jdbc: mysql: // localhost: 3306/databaseName? AutoReconnect = true; useSSL = false; – Amith

13

Un metodo alternativo potrebbe essere:

Properties properties = new Properties(); 
properties.setProperty("user", "root"); 
properties.setProperty("password", "milos23); 
properties.setProperty("useSSL", "false"); 
properties.setProperty("autoReconnect", "true"); 

try (Connection conn = DriverManager.getConnection(connectionUrl, properties)) { 
... 
} catch (SQLException e) { 
... 
} 

Anche se, non credo che l'impostazione di auto-riconnessione è necessaria per rimuovere l'avviso.

+3

corretto, il 'autoReconnect' non è necessario – Drew

+0

Suoni piacevoli, ma come ottengo questo nel mio application.yml della mia app-grails? –

1

le nuove versioni di mysql-connector stabilire la connessione SSL per impostazione predefinita ... per risolverlo:

scaricare la versione precedente di mysql-connector come mysql-connector-java-5.0.8.zip

. . o . . Scarica OpenSSL for Windows e seguire le istruzioni come impostarlo

7

Usa a risolvere il problema in alveare mentre facendo connessione con MySQL

<property> 
    <name>javax.jdo.option.ConnectionURL</name> 
    <value>jdbc:mysql://localhost/metastore?createDatabaseIfNotExist=true&amp;autoReconnect=true&amp;useSSL=false</value> 
    <description>metadata is stored in a MySQL server</description> 
</property> 
+0

Ma perché non ci vuole con l'operatore ** e **? Ho qualcosa di simile a 'jdbc: mysql: // localhost/metastore?useSSL = false & createDatabaseIfNotExist = true'. Senza il e funziona bene. – Kulasangar

+0

per me il valore pubblicato ha funzionato senza intoppi, quindi lo contrassegnerò come risposta alla fine del mese di dicembre 2017 e funzionerà con hive-2.1.1 hive-site.xml. – ArifMustafa

68

Come sull'utilizzo di SSL ma spegnere verifica server (ad esempio, quando in fase di sviluppo modalità sul proprio computer):

jdbc:mysql://localhost:3306/Peoples?verifyServerCertificate=false&useSSL=true 
+0

Questo è ciò che dovevo fare per connettermi a un database MySQL su SSL tramite IntelliJ/DataGrip – Swaraj

+2

Questa sembra la scelta migliore. – joarderm

4

questo era ok per me:

this.conn = (Connection)DriverManager 
    .getConnection(url + dbName + "?useSSL=false", userName, password); 
.210
7

è necessario all'utente vostro percorso mysql in questo modo:

<property name="url" value="jdbc:mysql://localhost:3306/world?useSSL=true"/> 
2

parlare del url come:

jdbc:mysql://hostname:3306/hibernatedb?autoReconnect=true&useSSL=false 

ma nella configurazione XML quando si parla & segno, l'IDE mostra qui sotto errore:

The reference to entity "useSSL" must end with the ';' delimiter. 

e poi si deve utilizzare in modo esplicito il &amp; invece di & da determinare come & da xml dopo, nello xml si deve dare l'URL nella configurazione XML come questo:

<property name="connection.url">jdbc:mysql://hostname:3306/hibernatedb?autoReconnect=true&amp;useSSL=false</property> 
0

ho trovato anche questo avvertimento ho usato useSSL = suffisso falso sulla stringa di connessione.

Esempio:

connectionString = "jdbc:mysql://{server-name}:3306/%s?useUnicode=yes&characterEncoding=UTF-8&useSSL=false" 
Problemi correlati