JDBC连接MySQL8 SSL

1.创建用户并指定ssl连接

grant all on . to 'test'@'%' identified by 'imooc require SSL(X509);

2.查看是否使用ssl

SELECT ssl_type From mysql.user Where user="test"

3.配置用户必须使用ssl

ALTER USER 'test'@'%' REQUIRE SSL(X509);

FLUSH PRIVILEGES;

注意:%号位置可以更换为连接数据库的ip

4.取消用户使用ssl连接

update user set ssl_type='' where user='test';

FLUSH PRIVILEGES;

5.证证书是否导入

keytool -list -keystore truststore.jks

6.数据库 datadir 目录下

文件名 说明

ca-key.pem CA私钥

ca.pem 自签的CA证书,客户端连接也需要提供

client-cert.pem 客户端连接服务器端需要提供的证书文件

client-key.pem 客户端连接服务器端需要提供的私钥文件

private_key.pem 私钥/公钥对的私有成员

public_key.pem 私钥/公钥对的共有成员

server-cert.pem 服务器端证书文件

server-key.pem 服务器端私钥文件

7、查看是否开启SSL

8、确认当前连接启用SSL

9、当前用户

10、bin/mysql SSL方式连接

mysql --ssl-ca=E:\\installprograms\\zhuomian\\SSL\\ca.pem --ssl_cert=E:\\installprograms\\zhuomian\\SSL\\client-cert.pem --ssl-key=E:\\installprograms\\zhuomian\\SSL\\client-key.pem -utest -P13306 -h192.168.0.103 -p

11、强制使用SSL连接

mysqld

#require_secure_transport = ON

12、查询用户状态

复制代码
select user,host,ssl_type,ssl_cipher,x509_issuer,x509_subject from mysql.user;

13、 show status like 'ssl_cipher';

设置服务器身份验证:导入服务器证书

keytool -importcert -alias MySQLCACert -file ca.pem -keystore truststore.jks -storepass 123456

设置客户端身份验证:

将客户端密钥和证书文件转换为 PKCS #12 存档:(在数据库服务器生成)

openssl pkcs12 -export -in client-cert.pem -inkey client-key.pem -name "mysqlclient" -passout pass:123456 -out client-keystore.p12

将客户端密钥和证书导入 Java 密钥库:

keytool -importkeystore -srckeystore client-keystore.p12 -srcstoretype pkcs12 -srcstorepass 123456 -destkeystore keystore.jks -deststoretype JKS -deststorepass 123456

demo:

java 复制代码
package org.example;

/**
 * @ClassName StandardJDBCSample
 * @Description TODO
 * @Author tangzongyun
 * @Date 2024/5/1 17:06
 * @Version 1.0
 **/
//mysql使用ssl方式jdbc连接数据库
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

/**
 * 标准JDBC操作五步骤
 */
public class StandardJDBCSample {
    public static void main(String[] args) {
        Connection conn = null;
        try {
            //1. 加载并注册JDBC驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            //2. 创建数据库连接
            String url = "";
            url = "jdbc:mysql://192.168.0.103:13306/mysql?"
            + "useSSL=true"
                    + "&verifyServerCertificate=true"
                    + "&requireSSL=true"
                    + "&trustCertificateKeyStoreUrl=file:E:\\installprograms\\zhuomian\\SSL\\truststore.jks"
                    + "&trustCertificateKeyStorePassword=123456"
                    + "&clientCertificateKeyStoreUrl=file:E:\\installprograms\\zhuomian\\SSL\\keystore.jks"
                    + "&clientCertificateKeyStorePassword=123456";
            conn = DriverManager.getConnection(url
                  ,
                    "test", "1qaz@WSX"
            );
            //3. 创建Statement对象
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("select * from user");
            //4. 遍历查询结果
            while (rs.next()) {
                //Integer eno = rs.getInt(1); //eno
                String ename = rs.getString("host");
                String user = rs.getString("user");
                String ssl_type = rs.getString("ssl_type");
                System.out.println(ename + "-" + user + "-" + ename + "-" + ssl_type);
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally {
            try {
                if (conn != null && conn.isClosed() == false) {
                    //5. 关闭连接,释放资源
                    conn.close();
                }
            }catch(Exception ex){
                ex.printStackTrace();
            }
        }

    }
}

参考文件:https://www.cnblogs.com/plluoye/p/11182945.html

相关推荐
KaMeidebaby11 小时前
卡梅德生物技术快报|小 RNA 适配体合成 + 多方法亲和力表征全流程标准化操作手册
前端·网络·数据库·人工智能·算法
阿成学长_Cain13 小时前
Linux telinit 命令详解:运行级别切换|关机重启|系统维护一站式掌握
linux·运维·前端·网络
NiceCloud喜云14 小时前
Anthropic 一周三连发:Cowork 多端、Fable 5 按需付费、J-space 论文的技术解读
java·服务器·网络·人工智能·ai
门思科技14 小时前
TKL + EB:重新定义 LoRaWAN 在存量设备改造中的价值,让传统设备快速接入物联网
网络·物联网
hai31524754315 小时前
九章芯片电路集成体系:密度矩阵逆向·全域均衡网络计算总框架
网络·线性代数·矩阵
DLYSB_15 小时前
《从零开始搭建机房轻量化“声光告警”系统:基于 HTTP API 与 TTS 的运维实践》
运维·网络协议·http·报警灯
芝麻馅汤圆儿15 小时前
跨三层环境(交换机vlan/vlanif配置)
网络
ZhengEnCi15 小时前
N3A-一个端口只能给一个程序使用吗?
网络协议
发光的沙子15 小时前
FPGA----配置根文件系统ip和mac地址
网络协议·tcp/ip·macos
wjql215 小时前
手机远程操控另一台手机的方法 手机可以远程操控手机吗
网络