自学内容网 自学内容网

mysql5.7安装SSL报错解决(2),总结

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)
以下介绍详细步骤

  1. 按照响应版本的openssl 版本 1.1.1 和mysql 版本 5.7.44

  2. 安装好了openssl和mysql相应版本之后,执行以下命令生成证书

cd D:\soft\new\mysql5.7\bin\
mysql_ssl_rsa_setup.exe --datadir=D:\\cert

会生成这几个文件
证书相关文件

  1. 将 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

在这里插入图片描述

  1. 配置数据库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
  1. 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();
    }
}




原文地址:https://blog.csdn.net/xwm1000/article/details/143604898

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!