SpringBoot设置mysql的ssl连接

因工作需要,mysql连接需要开启ssl认证,本文主要讲述客户端如何配置ssl连接。

开发环境信息:

复制代码
SpringBoot: 2.0.5.RELEASE
mysql-connector-java: 8.0.18
mysql version:8.0.18

一、检查服务端是否开启ssl认证

复制代码
show variables like '%ssl%';

二、确认用户强制使用ssl认证

1.检查用户是否启动ssl认证

复制代码
use mysql;
select ssl_type from user where user='username' and host='%';
复制代码
ps:username替换成具体的用户名。

2.强制用户使用ssl认证

复制代码
ALTER USER 'username'@'%' REQUIRE SSL;
FLUSH PRIVILEGES;

三、生成客户端证书

1.找服务端提供三个原始文件

2.生成truststore文件

java 复制代码
keytool -importcert -alias Cacert -file ca.pem  -keystore truststoremysql -storepass passwordzzzz

3.生成keystore文件

java 复制代码
openssl pkcs12 -export -in client-cert.pem -inkey client-key.pem -name "mysqlclient" -passout pass:passwordzzzz -out client-keystore.p12

keytool -importkeystore -srckeystore client-keystore.p12 -srcstoretype pkcs12 -srcstorepass passwordzzzz -destkeystore keystoremysql -deststoretype JKS -deststorepass passwordzzzz

以上两个文件生成的参数可以自己修改,windows环境中没有openssl,在linux环境中执行。红色部分的参数是后面配置要用到的。所有的密码保持一致;

四、修改mysql的连接参数

1.正常的请求如下

java 复制代码
spring.datasource.url = jdbc:mysql://1.2.3.4:3306/db?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&useSSL=false

2.ssl双向认证的请求如下

java 复制代码
ssl.cert.path=/utxt/soft/zpy/rkzl/key
ssl.config=true&verifyServerCertificate=true&requireSSL=true&clientCertificateKeyStoreUrl=file:${ssl.cert.path}/keystoremysql&clientCertificateKeyStorePassword=passwordzzzz&trustCertificateKeyStoreUrl=file:${ssl.cert.path}/truststoremysql&trustCertificateKeyStorePassword=passwordzzzz
spring.datasource.druid.master.url=jdbc:mysql://192.11.11.11:3306/111?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8&allowMultiQueries=true&useSSL=${ssl.config}
spring.datasource.druid.master.username=11
spring.datasource.druid.master.password=111

因为加上ssl认证后url太长了,所以提取了两个变量。

ssl.cert.path表示生成的两个证书文件存放路径

复制代码
ssl.config的value里根据证书生成的参数对应修改,如果不需要ssl认证值设置为false即可。

以上就完成了客户端的配置,如常启动服务,验证连接正常即可。

参考资料:
Connecting Securely Using SSL

线上 给出的文件是XXX.jks 文件证书,

可以不用生成这两个文件直接使用这个XXX.jks文件。配置文件里面的文件名替换下,并且password替换为默认的密码 apsaradb 就可以了。

相关推荐
气π2 小时前
【JavaWeb】——(若依 + AI)-基础学习笔记
java·spring boot·笔记·学习·java-ee·mybatis·ruoyi
Cat God 0072 小时前
SQL使用及注意事项
数据库·sql·mysql
华仔啊2 小时前
如何避免MySQL死锁?资深DBA的9条黄金法则
后端·mysql
@老蝴2 小时前
MySQL数据库 - 约束和联合查询
android·数据库·mysql
程序猿20232 小时前
MySQL索引使用--最左前缀法则
数据库·mysql
老华带你飞2 小时前
列车售票|基于springboot 列车售票系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·学习·spring
汝生淮南吾在北3 小时前
SpringBoot+Vue在线考试系统
vue.js·spring boot·后端·毕业设计·毕设
script.boy3 小时前
基于spring boot校园二手交易平台的设计与实现
java·spring boot·后端
猿与禅4 小时前
Spring Boot 4.0 完整核心特性及实践指南
java·spring boot·后端·spring·重大升级·springboot4.0
曲莫终4 小时前
SpringBoot使用AutoConfiguration自动配置Bean
spring boot