使用下面的两个类,我尝试连接到一个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.

这是带有main方法的测试类:

public class TestDatabase {

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

这是数据库类:

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();
            }
        }
    }
}

当前回答

我也发现了这个警告,然后我通过使用SSL=false后缀来修复它,就像这个示例代码一样。

例子:

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

其他回答

如果使用SSL但关闭服务器验证(例如在自己的计算机上处于开发模式时):

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

你需要像这样使用你的mysql路径:

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

由于我目前处于开发模式,我将useSSL设置为No,而不是在tomcat中,而是在mysql服务器配置中。去管理访问设置\管理服务器连接从工作台->选择我的连接。在连接选项卡进入SSL选项卡并禁用设置。为我工作。

我在配置xml中为hibernate使用了这个属性

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

without - serverTimezone=UTC -它不起作用

如果您的连接真实地暴露在网络中,或者您正在使用真实数据的生产环境中工作,那么当然:我们不应该通过包含useSSL=false选项来禁用SSL。

尝试更新JDBC连接字符串以包含最新的协议版本,如下所示:JDBC:mysql://:/?enabledTLSProtocols=TLSv1.2

在JDK 11中建立DB连接时,我们必须显式地提到TLS协议的类型。