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

相关推荐
paopaokaka_luck6 小时前
基于springboot3+vue3的企业考勤管理系统(部门树递归、Echarts图形化分析)
开发语言·spring boot·学习·echarts·mybatis·需求分析·代码规范
long3166 小时前
MySQL 学习练习(配套 01 入门资料)
数据库·学习·mysql
大眼、不聚光9 小时前
5.mysql--主从同步安装部署
数据库·mysql
sugar__salt10 小时前
Spring 三层架构与 IoC、依赖注入完全指南
java·spring boot·后端·spring·架构·maven·intellij-idea
wWYy.11 小时前
Mysql:索引下推
数据库·mysql
还是鼠鼠18 小时前
【Spring AI智能体实战 02】Spring Boot 3.4整合Spring AI:项目创建与依赖配置
java·人工智能·spring boot·maven·spring ai
东荷新绿18 小时前
【运维开发】acme.sh 安装|签发泛域名SSL证书,宝塔Nginx部署+自动续期
nginx·腾讯云·运维开发·ssl·宝塔·acme.sh
long31618 小时前
04-MySQL 扩展学习资料
数据库·mysql·adb
xiaoqiMikko19 小时前
Spring Cloud Config 这个 CVE 的补丁,Maven Central 上根本没有
java·spring boot
用户31268748772019 小时前
Spring Boot 配置体系到底怎么加载的?从 application.yml 到 @Conditional 的全链路拆解
java·spring boot