【MYSQL8】springboot项目,开启ssl证书安全连接

文章目录


一、开启ssl证书

1、msysql部署时默认开启ssl证书

可通过命令查看:

复制代码
SHOW VARIABLES LIKE '%have_ssl%';  

查询结果如下:

2、配置文件

配置my.cnf文件:

复制代码
vi my.cnf
[mysql]
ssl-ca = /opt/mysqldata/data/ca.pem
ssl-cert = /opt/mysqldata/data/client-cert.pem
ssl-key = /opt/mysqldata/data/client-key.pem
[mysqld]
require_secure_transport = ON
ssl-ca = /opt/mysqldata/data/ca.pem
ssl-cert = /opt/mysqldata/data/server-cert.pem
ssl-key = /opt/mysqldata/data/server-key.pem


文件说明:

ca.pem # 自签的CA证书,客户端连接也需要提供

client-cert.pem # 客户端连接服务器端需要提供的证书文件

client-key.pem # 客户端连接服务器端需要提供的私钥文件

server-cert.pem # 服务器端证书文件

server-key.pem # 服务器端私钥文件

3、创建用户并指定ssl

复制代码
create user jk_dev@'%' identified with mysql_native_password by '密码';
alter user 'jk_dev'@'%' require ssl;
grant all privileges on *.* to 'jk_dev'@'%';
flush privileges;

二、添加Java信任库

1、使用 keytool 导入证书

运行以下命令将 CA 证书导入到 Java 信任库:

复制代码
keytool -import -alias mysql_ca -file /opt/mysqldata/data/ca.pem -keystore $JAVA_HOME/jre/lib/security/cacerts

执行时需要输入信任库密码(默认为changeit)。

2、验证证书是否已导入

运行以下命令验证是否已导入:

复制代码
keytool -list -alias mysql_ca -keystore $JAVA_HOME/jre/lib/security/cacerts

如果证书未导入,Java无法将 MySQL 服务器提供的证书链追溯到它信任的根证书,连接时会报错:

复制代码
Caused by: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Path does not chain with any of the trust anchors
        at com.mysql.cj.protocol.ExportControlled$X509TrustManagerWrapper.checkServerTrusted(ExportControlled.java:379)
        at sun.security.ssl.AbstractTrustManagerWrapper.checkServerTrusted(SSLContextImpl.java:1255)
        at sun.security.ssl.CertificateMessage$T12CertificateConsumer.checkServerCerts(CertificateMessage.java:630)
        ... 81 common frames omitted
Caused by: java.security.cert.CertPathValidatorException: Path does not chain with any of the trust anchors
        at sun.security.provider.certpath.PKIXCertPathValidator.validate(PKIXCertPathValidator.java:159)
        at sun.security.provider.certpath.PKIXCertPathValidator.engineValidate(PKIXCertPathValidator.java:85)
        at java.security.cert.CertPathValidator.validate(CertPathValidator.java:292)
        at com.mysql.cj.protocol.ExportControlled$X509TrustManagerWrapper.checkServerTrusted(ExportControlled.java:373)
        ... 83 common frames omitted

三、修改连接配置

修改配置文件,数据库连接指向client-key.pem和client-cert.pem:

复制代码
spring.datasource.url=jdbc:mysql://xxxx:3306/jkfunds_dev?useSSL=true&requireSSL=true&verifyServerCertificate=true&clientCertificateKeyFile=file:/opt/mysqldata/data/client-key.pem&clientCertificateFile=file:/opt/mysqldata/data/client-cert.pem&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&autoReconnect=true&serverTimezone=Asia/Shanghai
相关推荐
尘觉5 小时前
中秋节与 Spring Boot 的思考:一场开箱即用的团圆盛宴
java·spring boot·后端
2301_772093567 小时前
tuchuang_后端_前端_注册登录
数据库·后端·网络协议·mysql·wireshark
K_i1347 小时前
中国电信用户行为实时分析系统运维实战
hadoop·mysql
武子康8 小时前
Java-141 深入浅出 MySQL Spring事务失效的常见场景与解决方案详解(3)
java·数据库·mysql·spring·性能优化·系统架构·事务
半旧夜夏8 小时前
【设计模式】核心设计模式实战
java·spring boot·设计模式
皮皮林5518 小时前
SpringBoot 控制台秒变炫彩特效,秀翻同事指南!
spring boot
IT学长编程10 小时前
计算机毕设选题 基于SpringBoot的书店管理系统的设计与实现 网上书店系统 前后端分离 Java毕设项目 毕业设计选题 【附源码+文档报告+安装调试】
java·spring boot·毕业设计·课程设计·前后端分离·网上书店系统·书店管理系统
IT学长编程10 小时前
计算机毕设选题 基于SpringBoot的房产租赁管理系统 房屋租赁系统 前后端分离 Java毕设项目 毕业设计选题 【附源码+文档报告+安装调试】
java·spring boot·毕业设计·课程设计·房屋租赁系统·房产租赁系统·文档报告
李慕婉学姐10 小时前
【开题答辩过程】以《基于 Spring Boot 的宠物应急救援系统设计与实现》为例,不会开题答辩的可以进来看看
数据库·spring boot·宠物