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 小时前
MySQL数据库从0到1
数据库·mysql·oracle
[听得时光枕水眠]3 小时前
MySQL基础(三)DQL(Data Query Language,数据查询语言)
数据库·mysql·oracle
XMYX-03 小时前
Spring Boot + Prometheus 实现应用监控(基于 Actuator 和 Micrometer)
spring boot·后端·prometheus
@yanyu6665 小时前
springboot实现查询学生
java·spring boot·后端
酷爱码5 小时前
Spring Boot项目中JSON解析库的深度解析与应用实践
spring boot·后端·json
java干货6 小时前
虚拟线程与消息队列:Spring Boot 3.5 中异步架构的演进与选择
spring boot·后端·架构
一只叫煤球的猫6 小时前
MySQL 8.0 SQL优化黑科技,面试官都不一定知道!
后端·sql·mysql
寒山李白6 小时前
MySQL安装与配置详细讲解
数据库·mysql·配置安装