SpringBoot设置mysql的ssl连接
2024-10-19 17:46:37
因工作需要,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文件
keytool -importcert -alias Cacert -file ca.pem -keystore truststoremysql -storepass password123
3.生成keystore文件
openssl pkcs12 -export -in client-cert.pem -inkey client-key.pem -name "mysqlclient" -passout pass:mypassword -out client-keystore.p12
keytool -importkeystore -srckeystore client-keystore.p12 -srcstoretype pkcs12 -srcstorepass mypassword -destkeystore keystoremysql -deststoretype JKS -deststorepass password456
以上两个文件生成的参数可以自己修改,windows环境中没有openssl,在linux环境中执行。红色部分的参数是后面配置要用到的。
四、修改mysql的连接参数
1.正常的请求如下
spring.datasource.url = jdbc:mysql://1.2.3.4:3306/db?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&useSSL=false
2.ssl双向认证的请求如下
ssl.cert.path = /home/app/cert
ssl.config = true&verifyServerCertificate=true&requireSSL=true&clientCertificateKeyStoreUrl=file:${ssl.cert.path}/keystoremysql&clientCertificateKeyStorePassword=password456&trustCertificateKeyStoreUrl=file:${ssl.cert.path}/truststoremysql&trustCertificateKeyStorePassword=password123
spring.datasource.url = jdbc:mysql://1.2.3.4:3306/db?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&useSSL=${ssl.config}
因为加上ssl认证后url太长了,所以提取了两个变量。
ssl.cert.path表示生成的两个证书文件存放路径
ssl.config的value里根据证书生成的参数对应修改,如果不需要ssl认证值设置为false即可。 以上就完成了客户端的配置,如常启动服务,验证连接正常即可。 参考资料:
Connecting Securely Using SSL
最新文章
- javascript中的弹框
- 实现:TextView自由复制功能
- Js setInterval与setTimeout(定时执行与循环执行)的代码(可以传入参数)
- iOS 此证书的签发者无效
- Python 2.7 学习笔记 中文处理
- 官方windows10升级工具
- Struts2配置问题终极解决方案
- 自己手写一个SpringMVC 框架
- (73)Wangdao.com第十二天_JavaScript consol 对象与控制台
- 剑指Offer 10. 矩形覆盖 (递归)
- Html Email 邮件html页编写指南
- Node学习笔记2:建立HTTP服务器和客户端之间的通信
- Nginx反向代理理解误区之proxy_cookie_domain
- HDU 3966 树链剖分+树状数组 模板
- 经典设计模式-iOS的实现
- Android.mk遍历子目录所有文件
- 图论——最小生成树prim+邻接表+堆优化
- input disable手机端颜色兼容问题
- PowerDesigner中翻转生成PDM图时把Name属性变成注释(转)
- Linux编写一个C程序HelloWorld
热门文章
- python之pytest框架实现
- html页面加载顺序
- Redis 消息中间件 ServiceStack.Redis 轻量级
- CF948D Perfect Security
- 【Oracle】CentOS7/CentOS8命令行重启Oracle 11G R2
- Leetcode 416分割等和子集
- 使用PInvoke互操作,让C#和C++愉快的交互优势互补
- PAT 1033 To Fill or Not to Fill (25分) 贪心思想
- 使用锚点定位不改变url同时平滑的滑动到锚点位置,不会生硬的直接到锚点位置
- Java实现 LeetCode 816 模糊坐标(暴力)