it-swarm.com.de

Warnung zur SSL-Verbindung beim Herstellen einer Verbindung zur MySQL-Datenbank

Mit den beiden folgenden Klassen habe ich versucht, eine Verbindung zu einer MySQL-Datenbank herzustellen. Allerdings bekomme ich immer diesen Fehler:

Wed Dec 09 22:46:52 CET 2015 WARNUNG: Das Herstellen einer SSL-Verbindung ohne Überprüfung der Serveridentität wird nicht empfohlen. Gemäß den Anforderungen von MySQL 5.5.45+, 5.6.26+ und 5.7.6+ muss die SSL-Verbindung standardmäßig hergestellt werden, wenn keine explizite Option festgelegt ist. Für die Kompatibilität mit vorhandenen Anwendungen, die kein SSL verwenden, ist die verifyServerCertificate-Eigenschaft auf "false" gesetzt. Sie müssen entweder SSL explizit deaktivieren, indem Sie useSSL = false festlegen, oder useSSL = true festlegen und einen Truststore für die Überprüfung des Serverzertifikats bereitstellen.

Dies ist die Testklasse mit der Methode main:

public class TestDatabase {

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

Dies ist die Klasse 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();
            }
        }
    }
}
287
Milos86

Ihre Verbindungs-URL sollte wie folgt aussehen:

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

Dadurch wird SSL deaktiviert und die SSL-Fehler werden unterdrückt.

538
Priyank Gosalia

Wie wäre es, wenn Sie SSL verwenden, aber die Serverüberprüfung deaktivieren (z. B. im Entwicklungsmodus auf Ihrem eigenen Computer):

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

erwähne das url wie:

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

wenn Sie in der XML-Konfiguration das Zeichen & angeben, wird der folgende Fehler in IDE angezeigt:

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

und dann müssen Sie explizit & anstelle von & verwenden, um & zu bestimmen von xml danach in xml muss die url in xml wie folgt konfiguriert werden:

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

Eine alternative Methode wäre:

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

Ich glaube jedoch nicht, dass die Einstellung für die automatische Neuverbindung erforderlich ist, um die Warnung zu entfernen.

20
Jon

sie müssen Ihren MySQL-Pfad folgendermaßen verwenden:

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

Ich habe diese Warnung auch gefunden und sie dann behoben, indem ich SSL = false als Suffix für die Verbindungszeichenfolge verwendet habe, wie in diesem Beispielcode.

Beispiel:

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

Verwenden Sie diese Option, um das Problem in Hive zu lösen, während Sie eine Verbindung mit MySQL herstellen

<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>
9
KARTHIKEYAN.A

Das war OK für mich:

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

Ich benutze diese Eigenschaft für den Ruhezustand in config xml

<property name="hibernate.connection.url">
jdbc:mysql://localhost:3306/bookshop?serverTimezone=UTC&amp;useSSL=false
</property>

ohne - serverTimezone = UTC - funktioniert es nicht

Lösung Um das Problem zu beheben, fügen Sie am Ende der MySQL-Verbindungszeichenfolge useSSL = false hinzu:

ex.

application.properties

mySQL-Datenquelle

spring.datasource.url=jdbc:mysql://localhost/dbname?useSSL=false
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
2
Pravin

die neuen Versionen von MySQL-Connector stellen standardmäßig eine SSL-Verbindung her ... um das Problem zu lösen:

Laden Sie die ältere Version von mysql-connector wie mysql-connector-Java-5.0.8.Zip herunter

. . oder . . Laden Sie OpenSSL für Windows herunter und befolgen Sie die Anweisungen zum Festlegen

2
Ahmad.ak