Caused by: java.io.EOFException: SSL peer shut down incorrectly
在java里面连接mysql5.7.17数据库,报以上错误,
将数据库升级到mysql5.7.44就可以了。
这两天处理java连接mysql的问题,报了各种错误,总结一下就是openssl和mysql的版本都不对,
经过实测:
JDK版本: 1.8 其他版本没试过。
openssl 版本 1.1.1 ,下载地址: OPENSSL 1.1.1
mysql版本 5.7.44(我测试的mysql 5.7.17不行,如果在5.7.17上报错的同学,请及时升级mysql版本到5.7.44)
以下介绍详细步骤
-
按照响应版本的openssl 版本 1.1.1 和mysql 版本 5.7.44
-
安装好了openssl和mysql相应版本之后,执行以下命令生成证书
cd D:\soft\new\mysql5.7\bin\
mysql_ssl_rsa_setup.exe --datadir=D:\\cert
会生成这几个文件
- 将 PEM 证书转换为 JKS:
你可以使用 Java 的 keytool 工具将 .pem 证书导入 .jks 文件中。
keytool -importcert -file client-cert.pem -keystore client-keystore.jks -alias mysqlclient
keytool -importcert -file ca.pem -keystore truststore.jks -alias mysqlca
- 配置数据库mysql的配置文件 my.ini
[client]
ssl-ca=D:\\cert\\ca.pem
ssl-cert=D:\\cert\\client-cert.pem
ssl-key=D:\\cert\\client-key.pem
[mysqld]
#服务器CA证书
ssl-ca=D:\\cert\\ca.pem
#服务端使用的证书
ssl-cert=D:\\cert\\server-cert.pem
#服务端使用的密钥
ssl-key=D:\\cert\\server-key.pem
- java连接测试。
package org.example;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class TestDb {
Connection con;
public static String user;
public static String password;
public void getConnection() {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
System.out.println("数据库驱动加载成功");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
user = "test";
password = "123456"; // 填自己的密码
try {
con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3309/sakila?" +
"allowMultiQueries=true&useUnicode=true&characterEncoding=utf-8&autoReconnect=true&" +
"useSSL=true&" +
"sslMode=VERIFY_CA&" +
"verifyServerCertificate=true&" +
"requireSSL=true&" +
"clientCertificateKeyStoreUrl=file:D:\\cert\\client-keystore.jks&clientCertificateKeyStorePassword=123456&" +
"trustCertificateKeyStoreUrl=file:D:\\cert\\truststore.jks&trustCertificateKeyStorePassword=123456"
, user, password);
System.out.println("数据库连接成功");
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
TestDb c = new TestDb();
c.getConnection();
}
}