Mysql使用SSL连接

Mysql使用SSL连接

  • 1.描述
  • 2.安装 OpenSSL
  • 3. 使用 OpenSSL 创建 SSL 证书和私钥
    • 3.1 修改mysql 的my.ini配置文件
    • 3.2 创建 SSL 证书和私钥
    • 3.3 验证是否连接成功
  • 4. 添加信任证书到java密钥库
  • 5. java 配置

1.描述

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

        show variables like '%ssl%';
1

  • 当 have_ssl 为 YES 时, 表示此时 MySQL 服务已经支持 SSL 了.
  • 如果是 DESABLE, 则需要在启动 MySQL 服务时, 使能 SSL 功能.
  • 如果mysql版本过低,可能不支持SSL ,需要先更新mysql版本:
    删除mysql服务参考链接:彻底卸载MySQL服务.
    安装mysql服务参考链接:win10下mysql的下载、安装以及SSL配置超详解教程.

2.安装 OpenSSL

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

安装步骤:

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

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

Mysql使用SSL连接_第10张图片

3.2 创建 SSL 证书和私钥

  • 关闭mysql服务:cmd - > net stop mysql
    Mysql使用SSL连接_第11张图片
  • 运行mysql_ssl_rsa_setup.exe:
    进入mysql的bin目录,找到mysql_ssl_rsa_setup.exe,双击运行:Mysql使用SSL连接_第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配置成功。
    Mysql使用SSL连接_第13张图片

3.3 验证是否连接成功

  • 以管理员身份运行cmd,进入mysql的bin目录:
    Mysql使用SSL连接_第14张图片
  • 启动mysql服务,执行:net start mysql
    Mysql使用SSL连接_第15张图片
  • 输入命令登录mysql:mysql -uroot -p
    Mysql使用SSL连接_第16张图片
  • 执行:show variables like '%ssl%';
    Mysql使用SSL连接_第17张图片
    此时可以看到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:
    Mysql使用SSL连接_第18张图片
  • 执行成功后,系统自动会在data目录下生成truststore库,供java jdbc 连接使用:
    Mysql使用SSL连接_第19张图片

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
    结果如下:
    Mysql使用SSL连接_第20张图片
    (2)添加另一个人的证书到证书库中:
    先将另一个人的ca.pem文件重命名(我这边的命名为:cui.pem),然后放置到data目录下;
    然后执行命令:keytool -importcert -alias 'cuijian' -file cui.pem -keystore ssl_truststore.gks --storepass math123456
    结果输出:
    Mysql使用SSL连接_第21张图片

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证书位置,如:
    Mysql使用SSL连接_第22张图片

你可能感兴趣的:(数据库,mysql,ssl,数据库)