JDBC连接MySQL8 SSL

server/2024/11/17 3:41:57/


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:

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); //enoString 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


http://www.ppmy.cn/server/32487.html

相关文章

【前端学习——react文档】学习react文档笔记(持续更新)

React官方文档 我不一定按照文档顺序记录 jsx语法系列 JSX 中通过大括号使用 JavaScript 可以在哪使用大括号 &#xff1f; 用作 JSX 标签内的文本&#xff1a;<h1>{name}s To Do List</h1> 是有效的&#xff0c;但是 <{tag}>Gregorio Y. Zaras To Do Lis…

1.3 Java全栈开发前端+后端(全栈工程师进阶之路)-前置课程CSS,看这一篇就够了

前面我们已经讲了前端三剑客中的html和JavaScript&#xff0c;那么现在我们来看一下CSS CSS核心 0、清除默认样式 * {/* 清除默认样式 */margin: 0;padding: 0; } 1、尺寸操作-内外边距 .box {/* 尺寸操作 *//* 宽度 */width: 500px ; /* 高度 */height: 280px;/* 边框 *…

Python爬虫:线程,进程与协程

以往的爬虫我们都采用单线程和同步的方式&#xff0c;这导致我们的爬虫及其脆弱&#xff0c;因为一点报错都会让它停下来&#xff0c;而且面对比较大的数据&#xff0c;爬虫只能选择等待&#xff0c;这种阻塞会消耗很多时间&#xff0c;为什么我们不把等待的这些时间去干别的事…

vue3 jspdf,element table 导出excel、pdf,横板竖版分页

多个表格需要&#xff0c;pdf需要的格式与原本展示的表格样式不同 1.创建一个新的表格&#xff0c;设置pdf需要的样式&#xff0c;用vue的h函数放入dom中 2.excel用xlxs插件直接传入新建el-table的dom,直接导出 3.pdf导出类似excel黑色边框白底黑字的文件&#xff0c;把el-t…

Apache SSI远程命令执行漏洞

什么是SSI Apache SSI&#xff08;Server Side Include)&#xff0c;通常称为"服务器端嵌入"或者叫"服务器端包含"&#xff0c;是一种类似于ASP的基于服务器的网页制作技术。默认扩展名是 .stm、.shtm 和 .shtml。 从技术层面来讲&#xff0c;SSI是一种在静…

UnityWebGL使用sherpa-ncnn实时语音识别

k2-fsa/sherpa-ncnn&#xff1a;在没有互联网连接的情况下使用带有 ncnn 的下一代 Kaldi 进行实时语音识别。支持iOS、Android、Raspberry Pi、VisionFive2、LicheePi4A等。 (github.com) 如果是PC端可以直接使用ssssssilver大佬的 https://github.com/ssssssilver/sherpa-ncn…

【机器学习】集成方法---Boosting之AdaBoost

一、Boosting的介绍 1.1 集成学习的概念 1.1.1集成学习的定义 集成学习是一种通过组合多个学习器来完成学习任务的机器学习方法。它通过将多个单一模型&#xff08;也称为“基学习器”或“弱学习器”&#xff09;的输出结果进行集成&#xff0c;以获得比单一模型更好的泛化性…

39.乐理基础-拍号-认识音符

拍号是一个分数的形式&#xff0c;如下图篮色的圈圈里的东西&#xff0c;但它的实际意义和分数没什么关系&#xff0c;只是外观上是一个分数的形式 单独拿出拍号&#xff0c;如下图&#xff1a; 然后接下来只要搞懂什么是 Y分音符、一拍、小节就可以了。 音符&#xff1a; 控…