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 就可以了。

相关推荐
Dxy12393102161 小时前
python连接minio报错:‘SSL routines‘, ‘ssl3_get_record‘, ‘wrong version number‘
开发语言·python·ssl
想唱rap3 小时前
表的约束条件
linux·数据库·mysql·ubuntu·bash
千寻技术帮4 小时前
10341_基于Springboot的珠宝销售网站
spring boot·mysql·毕业设计·商城·珠宝商城
深海小黄鱼4 小时前
mysql 导入csv文件太慢, Error Code: 1290.
数据库·mysql
野犬寒鸦5 小时前
从零起步学习MySQL || 第十六章:MySQL 分库分表的考量策略
java·服务器·数据库·后端·mysql
一只叫煤球的猫5 小时前
为什么Java里面,Service 层不直接返回 Result 对象?
java·spring boot·面试
小当家.1056 小时前
从零构建项目认知:如何画出一张合格的系统架构图(以供应链系统为例)
java·spring boot·学习·架构·系统架构·供应链·实习
悟能不能悟6 小时前
springboot如何通过url地址获得这个地址的文件
java·spring boot·后端
沛沛老爹6 小时前
Web开发者突围AI战场:Agent Skills元工具性能优化实战指南——像优化Spring Boot一样提升AI吞吐量
java·开发语言·人工智能·spring boot·性能优化·架构·企业开发
yangminlei6 小时前
Spring Boot 响应式 WebFlux 从入门到精通
java·spring boot·后端