JDBC通过SSL方式连接MySQL

2023-05-16

环境说明

MySQL 版本

MySQL 5.7.26

pom.xml

<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <version>8.0.18</version>
</dependency>

JDK版本

JDK 1.8

MySQL配置SSL

查看MySQL是否支持SSL连接

  • 查看MySQL是否支持SSL
SHOW VARIABLES LIKE 'have_ssl'

如果hava_ssl对应的值为YES则支持SSL

  • 查询ssl证书地址
show variables like '%ssl%';

在这里插入图片描述
ssl_ca对应的就是ssl证书名

创建SSL连接用户

  • 创建用户
CREATE USER 'ssler'@'%' IDENTIFIED BY '123456';
GRANT ALL ON *.* TO 'ssler'@'%'
  • 查看用户是否使用ssl
SELECT ssl_type From mysql.user Where user="ssler"

在这里插入图片描述
截图中ssl_type为空字符串,表示该用户不强制要求使用ssl连接。

  • 配置用户必须使用ssl连接
ALTER USER 'ssler'@'%' REQUIRE SSL;
FLUSH PRIVILEGES

此时再执行SELECT ssl_type From mysql.user Where user="ssler"
在这里插入图片描述
ANY表示必须使用ssl连接。

JDBC配置

导入证书

  • 使用jdk自带的keytool导入mysql的客户端证书到密钥仓库,并生成密钥文件。
    根据上文查到的ca.pem,将其复制到目标主机上,然后执行下述指令
$ keytool -import -trustcacerts -v -alias Mysql -file ca.pem -keystore "mysql.ks"
输入密钥库口令:
再次输入新口令:
所有者: CN=MySQL_Server_5.7.26_Auto_Generated_CA_Certificate
发布者: CN=MySQL_Server_5.7.26_Auto_Generated_CA_Certificate
序列号: 1
有效期为 Wed Apr 29 16:32:45 CST 2020 至 Sat Apr 27 16:32:45 CST 2030
证书指纹:
         MD5:  09:E7:41:84:08:B0:70:5F:AC:D6:03:61:CE:F4:50:DE
         SHA1: 6B:EE:FE:B4:74:89:A3:88:6C:49:22:44:6D:FB:88:DE:18:6A:7A:F6
         SHA256: 83:DD:8F:83:71:08:1D:36:D6:C0:2B:23:D2:E9:DC:84:0E:D6:ED:9A:E5:85:DF:7C:7C:52:33:9A:D7:83:0F:29
签名算法名称: SHA256withRSA
主体公共密钥算法: 2048 位 RSA 密钥
版本: 3

扩展:

#1: ObjectId: 2.5.29.19 Criticality=false
BasicConstraints:[
  CA:true
  PathLen:2147483647
]

是否信任此证书? []:  y
证书已添加到密钥库中
[正在存储mysql.ks]

通过指令验证证书是否导入:

$ keytool -list -keystore mysql.ks
输入密钥库口令:
密钥库类型: jks
密钥库提供方: SUN

您的密钥库包含 1 个条目

mysql, 2020-6-9, trustedCertEntry,
证书指纹 (SHA1): 6B:EE:FE:B4:74:89:A3:88:6C:49:22:44:6D:FB:88:DE:18:6A:7A:F6

将证书放在目标服务器上

在密钥仓库文件生成的文件夹下,配置http服务器。此处使用go写一个http文件服务器:

package main

import "net/http"

func main()  {
	http.Handle("/", http.FileServer(http.Dir(".")))
	http.ListenAndServe(":9999", nil)
}

将编译后的go程序放在与mysql.ks同一目录下,并启动即可

编写JDBC代码

public class JDBCMySQL {

    public static void main(String[] args) {
        Connection connection = null;
        String urlWithCe = "jdbc:mysql://192.168.254.82:13306/cloud?" +
                "useSSL=true&trustCertificateKeyStorePassword=123456&" +
                "trustCertificateKeyStoreUrl=http://localhost:9999/mysql.ks&" +
                "allowMultiQueries=true&" +
                "useUnicode&characterEncoding=UTF-8&" +
                "verifyServerCertificate=false&requireSSL=true";
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            connection = DriverManager.getConnection(urlWithCe,
                    "ssler", "123456");
            PreparedStatement preparedStatement = connection.prepareStatement("select * from " +
                    "cm_user");
            System.out.println(preparedStatement.executeQuery().first());
        } catch (Exception exception) {
            exception.printStackTrace();
        }
    }
}

trustCertificateKeyStorePassword=123456为密钥仓库的密码,在生成密钥仓库文件时配置;
trustCertificateKeyStoreUrl=http://localhost:9999/mysql.ks为证书放置在http服务器后的地址

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JDBC通过SSL方式连接MySQL 的相关文章

随机推荐

  • 计蒜客-炮台实验

    蒜头君在玩一个战争模拟游戏 xff0c 他有高度为 1 2 3 ldots n1 2 3 n 的炮台各一个 xff0c 他需要把这 nn个炮台从左往右排成一行 xff0c 并且炮口都朝向右边 在这个游戏中 xff0c 所有炮台发射的炮弹会摧
  • Dockerfile详解超全

    Dockerfile详解 环境介绍指令介绍FROMMAINTAINERLABELADDCOPYEXPOSEENV在Dockerfile中使用变量的方式 RUNCMDRUN amp amp CMDENTRYPOINTVOLUMEUSERWOR
  • Debian8 修改root密码

    1 当系统启动进入GNU GRUB界面 xff0c 按esc停留在此页面 xff0c 按上下的方向键可以进行选择 2 选中要修改的系统 xff0c 按e进入编辑状态 xff0c 在linux开头的这一行末尾加上 init 61 bin ba
  • debian10 配置ntp服务

    debian10 配置ntp服务 1 安装ntp2 配置3 验证 服务器不能连外网 xff0c 内网中有一台授时服务器 xff0c 内网也搭建了debian10的本地镜像源 1 安装ntp apt install ntp 2 配置 sudo
  • STL priority_queue使用

    转自 xff1a http www cnblogs com lvpengms archive 2010 04 05 1704669 html 包含priority queue 的头文件是 lt queue gt priority queue
  • GNU 简单介绍(含glibc 源码下载)

    GNU是什么 xff1f 先放网址 xff1a https www gnu org GNU是一个自由软件操作系统 就是说 xff0c 它尊重其使用者的自由 GNU操作系统包括GNU软件包 xff08 专门由GNU工程发布的程序 xff09
  • P1591 阶乘数码 【高精】

    题目描述 求 n n n 中某个数码出现的次数 输入格式 第一行为 t t 10 t t leq 10 t t 10 xff0c 表示数据组数 接下来 ttt 行 xff0c 每行一个正整数 n n 1000 n n leq 1000 n
  • P1825 [USACO11OPEN]Corn Maze S 【BFS】

    题目描述 This past fall Farmer John took the cows to visit a corn maze But this wasn t just any corn maze it featured severa
  • P1002 过河卒 【DP】

    题目描述 棋盘上 AAA 点有一个过河卒 xff0c 需要走到目标 BBB 点 卒行走的规则 xff1a 可以向下 或者向右 同时在棋盘上 CCC 点有一个对方的马 xff0c 该马所在的点和所有跳跃一步可达的点称为对方马的控制点 因此称之
  • [论文笔记-6]Discrete Opinion Tree Induction for Aspect-based Sentiment Analysis

    题目 作者 abstract 1 依赖树 dependency trees 缺点 xff1a 依赖于外部解析器 xff0c 而这些解析器对于低资源的语言来说是不可用的 xff0c 或者在低资源的领域表现更差 xff1b 没有为基于方面的情感
  • hexo搭建——debian 环境变量设置

    1 问题描述 首先需要明白所谓git部署到服务器的原理 Hexo g 会生成一个静态网站 xff08 第一次会生成一个public目录 xff09 xff0c 这个静态文件可以直接访问 需要将hexo生成的静态网站 xff0c 提交服务器重
  • 将13位图书条码转换为ISBN-10(2007年以前图书)的方法

    将13位图书条码转换为ISBN 10 2007年以前图书 的方法 lt summary gt 2007年前图书13条码转换成ISBN 10位方法 lt summary gt lt param name 61 34 Isbn13 34 gt
  • 2022 年您需要了解的 10 大计算机视觉框架

    计算机视觉是一个快速发展的科学领域 xff0c 它处理从数字图像和视频中提取信息以获得对环境的高级理解 该技术主要应用于机器人 增强现实和自动驾驶汽车中的复杂问题 xff0c 例如物体检测 导航空间测量 面部识别 动作和活动识别 驱动视觉和
  • No Target Connected 错误时的一种情况

    STM32的SWD烧录模式No Target Connected 错误的一种情况 STM32的SWD烧录模式No Target Connected 错误时的一种处理情况 这是我第一次烧板子的时候遇到的问题 xff0c 在给板子downloa
  • wxpython设计GUI:窗口Frame最大化、最小化、关闭及全屏显示的说明

    在用户实际使用窗口时必然涉及到窗口的最大化 最小化 是否全屏显示及窗口关闭操作 wx Frame介绍链接 xff1a https docs wxpython org wx Frame html highlight 61 frame wx f
  • 算法设计动态规划-租用游艇问题 

    7 2 租用游艇问题 17分 题目来源 xff1a 王晓东 xff0c 算法设计与分析 长江游艇俱乐部在长江上设置了n个游艇出租站1 xff0c 2 xff0c xff0c n 游客可在这些游艇出租站租用游艇 xff0c 并在下游的任何一个
  • 六、SLAM学习笔记—— Firefly RK3566 Ubuntu18.04 远程桌面

    前言 在前面的文章中 xff0c 解决了FireFly安装ROS xff0c 安装Cartographer 配置交叉编译OpenCV 双目摄像头的驱动 为了通过RK3566实现ROS小车 xff0c 那么远程桌面是非常必要的 xff0c 因
  • Ubuntu login incorrect问题解决

    小弟最近开始使用Ubuntu xff0c 使用win7系统 xff0c WM10的虚拟机 Ubuntu的版为14 04 xff0c 这里面遇到几个坑 xff0c 小小总结下 xff1a 1 xff09 刚用Ubuntu的时候不知道wubi
  • Mac OSX上移动硬盘读写及Mac OSX原生的读写NTFS功能的打开方法

    问题描述 xff1a 默认情况下 xff0c 把一个NTFS格式的磁盘插入到Mac里 xff0c 是只能读不能写的 解决方法 xff1a 方法一 xff1a 把移动硬盘分成了双分区 xff0c 一个NTFS xff0c 一个HFS 本文不做
  • JDBC通过SSL方式连接MySQL

    环境说明 MySQL 版本 MySQL 5 7 26 pom xml span class token tag span class token tag span class token punctuation lt span depend