Mysql使用SSL连接

1.描述

  项目部署时要求对数据库进行加密连接,需要用到SSL连接,记录一下。
 首先在 MySQL 上执行如下命令, 查询当前版本的mysql是否支持 SSL:

        show variables like '%ssl%';
1

2.安装 OpenSSL

OPEN SSL下载链接: Win64OpenSSL-3_0_0.msi..

安装步骤:

  1. 下载放置到有效目录,点击Win64OpenSSL-3_0_0.msi进行安装:
    2
  2. 选择目录:
    34
    5
    6
  3. 点击‘finish’:
    7
  4. 新增环境变量:
    参考上述3.3节,新增环境变量:
    变量名:OPENSSL_HOME
    变量值:安装路径 D:\OpenSSL-Win64\OpenSSL-Win64
    8
    编辑path:在path最后添加 ;%OPENSSL_HOME%\bin;
    9
  5. 验证安装是否成功:
    cmd 命令行输入-> openssl
    10

3. 使用 OpenSSL 创建 SSL 证书和私钥

3.1 修改mysql 的my.ini配置文件

到mysql的安装目录,找到my.ini文件,在文件中添加ssl证书文件位置配置:

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8 
[mysqld]
#设置3306端口
port = 3306 
# 设置mysql的安装目录
basedir="D:\mysql-5.7.28-winx64_withssl"
# 设置mysql数据库的数据的存放目录
datadir="D:\mysql-5.7.28-winx64_withssl/data"
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
#skip-grant-tables

#需要开启ssl服务,才需要配置ssl文件路径
ssl-ca=D:\mysql-5.7.28-winx64_withssl/data/ca.pem
ssl-cert=D:\mysql-5.7.28-winx64_withssl/data/server-cert.pem
ssl-key=D:\mysql-5.7.28-winx64_withssl/data/server-key.pem
#【关闭ssl】
#skip_ssl

11

3.2 创建 SSL 证书和私钥

  • 关闭mysql服务:cmd - > net stop mysql
    12
  • 运行mysql_ssl_rsa_setup.exe:
    进入mysql的bin目录,找到mysql_ssl_rsa_setup.exe,双击运行:12
    运行结束后,进入data目录,看到ssl文件(ssl文件位置在my.ini文件中配置指定):
    ca-cert.pem: CA 证书, 用于生成服务器端/客户端的数字证书.
    ca-key.pem: CA 私钥, 用于生成服务器端/客户端的数字证书.
    server-key.pem: 服务器端的 RSA 私钥
    server-req.pem: 服务器端的证书请求文件, 用于生成服务器端的数字证书.
    server-cert.pem: 服务器端的数字证书.
    client-key.pem: 客户端的 RSA 私钥
    client-req.pem: 客户端的证书请求文件, 用于生成客户端的数字证书.
    client-cert.pem: 客户端的数字证书.
    则SSL配置成功。
    13

3.3 验证是否连接成功

  • 以管理员身份运行cmd,进入mysql的bin目录:
    14
  • 启动mysql服务,执行:net start mysql
    15
  • 输入命令登录mysql:mysql -uroot -p
    15
  • 执行:show variables like '%ssl%';
    16
    此时可以看到ssl创建的证书和密钥文件。

4. 添加信任证书到java密钥库

  • 命令行进入msql的data目录下:
    D: -> cd D:\mysql-5.7.28-winx64_withssl\data
  • 执行命令:
    keytool -importcert -file ca.pem -keystore truststore --storepass 库密码
    执行:keytool -importcert -file ca.pem -keystore truststore --storepass math23456:
    17
  • 执行成功后,系统自动会在data目录下生成truststore库,供java jdbc 连接使用:
    18

truststore文件中存储的证书库,供java jdbc 连接使用。
因此可以多个用户、连接使用同一个证书库,便于多人访问。

  • 将另一个证书也导入这个证书库中,可执行命令:
    keytool -importcert -alias "证书所属者名称" -file ‘ca的文件名称’ -keystore 证书库名称--storepass 库密码
  • 查看证书库中已有的证书,可执行命令:
    keytool -list -keystore ./证书库名称-storepass 库密码
    如:
    (1)添加自己的证书到证书库中,命名证书库文件为’ssl_truststore.gks‘,
       执行命令:keytool -importcert -file ca.pem -keystore ssl_truststore.gks --storepass math123456
      看此时的证书库的证书条目:
    keytool -list -keystore ./ssl_truststore.gks -storepass math123456
    结果如下:
    19
    (2)添加另一个人的证书到证书库中:
    先将另一个人的ca.pem文件重命名(我这边的命名为:cui.pem),然后放置到data目录下;
    然后执行命令:keytool -importcert -alias 'cuijian' -file cui.pem -keystore ssl_truststore.gks --storepass math123456
    结果输出:
    20

5. java 配置

  • 将生成的文件配置系统环境变量:

名:JAVA_OPTS
值:-Djavax.net.ssl.trustStore=“上一步中生成文件的本地路径” -Djavax.net.ssl.trustStorePassword=“密码”

  • JDBC配置连接时添加ssl:
jdbc.url=jdbc:mysql://127.0.0.1:3306/mydb?verifyServerCertificate=true&useSSL=true&requireSSL=true
  • 在jdbc创建连接时指定truststore证书位置,如:
    19
  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
在Java中,当你尝试使用JDBC(Java Database Connectivity)连接MySQL数据库时,遇到"Public Key Retrieval is not allowed"这样的错误,通常表示JVM(Java Virtual Machine)不信任MySQL服务器的SSL证书。这是因为Java要求从HTTPS服务器获取并验证数字证书,以确保连接的安全性。 这个错误通常是由于以下原因: 1. **JVM配置不正确**:可能是你的系统没有设置允许JVM从不受信源获取SSL证书,或者JVM的SSL证书设置不支持从MySQL服务器获取证书。 2. **MySQL SSL配置**:MySQL可能没有正确配置SSL,或者证书路径设置不正确,导致JDBC驱动无法找到并验证证书。 3. **JDBC驱动版本**:过旧的JDBC驱动可能不支持SSL或证书管理,需要更新到最新版本。 为了解决这个问题,你可以尝试以下几个步骤: 1. **检查JVM配置**:确保`JAVA_OPTS`或`jvm.options`中没有禁止从不受信源获取证书的设置,如`-Djavax.net.ssl.trustStore=...` 和 `-Djavax.net.ssl.trustStorePassword=...`。 2. **获取并安装证书**:下载MySQLSSL证书文件(通常是.pem格式),将其导入到Java的信任store中。 3. **更新JDBC驱动**:确保使用的JDBC驱动支持MySQLSSL功能。 4. **修改MySQL SSL配置**:在MySQL的配置文件中(如my.cnf),设置正确的SSL选项,例如`ssl-ca`, `ssl-cert`, 和 `ssl-key`。 5. **重启服务**:配置更改后,需要重启MySQL服务使其加载新的SSL设置。 6. **测试连接**:重新尝试连接,看是否能够成功并且不再显示SSL相关的错误。 如果你正在使用Spring Boot或Spring Data JPA等框架,还需要检查相应的配置文件,因为它们可能提供了额外的配置选项。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值