web-dev-qa-db-fra.com

Avertissement concernant la connexion SSL lors de la connexion à la base de données MySQL

Avec les deux classes ci-dessous, j'ai essayé de me connecter à une base de données MySQL. Cependant, j'ai toujours cette erreur:

Wed Dec 09 22:46:52 CET 2015 WARN: L'établissement d'une connexion SSL sans vérification de l'identité du serveur n'est pas recommandé. Selon MySQL 5.5.45+, 5.6.26+ et 5.7.6+, la connexion SSL doit être établie par défaut si l'option explicite n'est pas définie. Pour la conformité avec les applications existantes qui n'utilisent pas SSL, la propriété verifyServerCertificate est définie sur "false". Vous devez désactiver explicitement SSL en définissant useSSL = false ou définir useSSL = true et fournir un magasin de clés de confiance pour la vérification du certificat de serveur.

C'est la classe de test avec la méthode main:

public class TestDatabase {

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

C'est 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();
            }
        }
    }
}
287
Milos86

Votre URL de connexion devrait ressembler à celle ci-dessous,

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

Cela désactivera SSL et supprimera également les erreurs SSL.

538
Priyank Gosalia

Pourquoi ne pas utiliser SSL mais désactiver la vérification du serveur (comme en mode développement sur votre propre ordinateur):

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

mentionner le url comme:

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

mais dans la configuration xml lorsque vous mentionnez le signe &, le IDE indique l'erreur ci-dessous:

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

et vous devez alors utiliser explicitement le & au lieu de & à déterminer comme & par xml par la suite dans xml, vous devez donner l’URL en configuration xml comme ceci:

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

Une autre méthode serait:

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

Bien que, je ne pense pas que le paramètre de reconnexion automatique soit nécessaire pour supprimer l'avertissement.

20
Jon

vous devez utiliser votre chemin mysql comme ceci:

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

J'ai trouvé cet avertissement aussi, puis je l'ai corrigé en utilisant SSL = faux suffixe pour la chaîne de connexion, comme dans cet exemple de code.

Exemple:

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

Utilisez ceci pour résoudre le problème dans Hive tout en établissant une connexion avec 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>
9
KARTHIKEYAN.A

C'était OK pour moi:

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

J'utilise cette propriété pour hiberner dans config xml

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

sans - serverTimezone = UTC - cela ne fonctionne pas

4

Solution Pour résoudre ce problème, ajoutez un useSSL = false à la fin de la chaîne de connexion MySQL:

ex.

application.properties

source de données mysql

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

les nouvelles versions de mysql-connector établissent une connexion SSL par défaut ... pour la résoudre:

Téléchargez l'ancienne version de mysql-connector telle que mysql-connector-Java-5.0.8.Zip

. . ou . . Téléchargez OpenSSL pour Windows et suivez les instructions pour le configurer.

2
Ahmad.ak