业务场景
在一些情况下,为了保证应用程序到数据库之前数据传输的安全性,以及数据库查询完成之后返回给应用程序的传输中的安全性,可以通过开启 Mysql 的 SSl 加密协议来提高数据传输的安全性,下面将主要告诉大家如何开启 Mysql 权限管理账户的 SSL 权限以及 Java 客户端如何正确配置链接参数来实现应用程序到数据库的正常业务数据传输。
Mysql 配置
Mysql 需要配置对应的 ssl 账号密码,同时对该账号开启 ssl 验证,具体操作由 DBA 完成,这里我就不再赘述,作为 Java 客户端只需要拿到 DBA 配置的账号对应的 ca.pem 证书信息即可开启后面的操作。
验证 Mysql 开启 SSL
验证命令
show global variables like '%ssl%';
验证结果如图,可以看到数据库是否开启 ssl 协议
开启 ssl 协议之后可以看到对应 Mysql 服务器的证书路径,拿到证书文件后放在 windows 本地目录等待下一步操作
Java 客户端操作
这里我测试本地 windows 环境的操作,linux 的操作基本相同,只是文件路径的区别而已
生成证书密码
首先需要基于上一步 Mysql 配置完 ssl 账户生成对应的 ca.pem 证书,通过 jvm 的 keytool 工具将 ca.pem 证书放入到 truststore 仓库中;
windows 操作系统可以直接在上一步存放 ca.pem 证书的目录通过快捷键【Ctrl+Shift+鼠标右键】唤起 Powershell 窗口,执行命令
keytool -importcert -alias MySQLCACert -file ca.pem -keystore truststore -storepass 123456
其中:truststore 是存储证书的密钥库,123456 是密钥库口令
生成之后可以查看一下是否生成成功,操作命令
keytool -list -keystore truststore
输入密钥库口令之后可以看到证书信息
回到唤起 Powershell 窗口的文件夹(即存放 ca.pem)的文件夹下可以看到生成的证书密钥库文件 truststore,如图
这样证书密码就算生成成功了,证书密码路径为: E:\2022mycomputer\mysql_cert\truststore
配置数据库连接
数据库连接如下
datasource.masterUrl=jdbc:mysql://127.0.0.1:3306/ei_app?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&verifyServerCertificate=true&requireSSL=true&sslMode=verify_ca&trustCertificateKeyStoreUrl=file:E:/2022mycomputer/mysql_cert/truststore&trustCertificateKeyStorePassword=123456
参数说明:
useSSL:是否建立 SSL 连接
verifyServerCertificate:是否需要检验 Mysql 服务器证书
requireSSL:SSL 连接,如果 Mysql 服务器不支持会失败
sslMode:SSL 的连接模式
trustCertificateKeyStoreUrl:truststore 密钥库文件
trustCertificateKeyStorePassword:truststore 密钥库口令
配置完成之后再使用对应 ca.pem 证书的账户密码即可以正常连接 Mysql 了
工具配置
这里举例工具为 navicat ,个人测试的 navicat 15 可以通过 ssl 连接数据库,navicat 11 连接不成功,连接操作如图
配置 SSL 证书信息
配置完成之后点击连接测试,如果你当前的 navicat 版本支持 SSL 连接的话会提示
如果配置没有问题但是连接测试提示失败的,那就是当前版本的 navicat 不支持 SSL 连接
可以升级 navicat 到高的版本即可,这个是版本不兼容 SSL 加密协议的问题,不是你的配置有问题的哦。