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文件

keytool -importcert -alias Cacert -file ca.pem  -keystore truststoremysql -storepass passwordzzzz

 3.生成keystore文件

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.正常的请求如下

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

### 配置和使用Spring Boot中的MySQL连接池 在Spring Boot应用程序中配置并使用MySQL连接池涉及几个关键步骤。通过适当设置`application.properties`文件以及引入必要的依赖项,可以实现高效可靠的数据库操作。 #### 添加Maven依赖 为了使项目能够访问MySQL数据库,需向项目的pom.xml添加特定于MySQL驱动程序的依赖关系[^2]: ```xml <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> ``` 此外,建议加入用于监控和服务健康检查的支持库,这有助于更好地管理资源和诊断潜在问题: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> ``` #### 修改Application Properties 接下来,在`src/main/resources/application.properties`或其YAML版本中定义数据源属性来指定要使用的具体数据库实例及其凭证信息。这里展示了一个典型的配置示例外观: ```properties spring.datasource.url=jdbc:mysql://localhost:3306/your_database_name?useSSL=false&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=password spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver ``` 上述URL参数解释如下: - `jdbc:mysql://`: 协议前缀表示这是一个JDBC URL指向MySQL服务器。 - `localhost`: 数据库主机地址;如果是远程,则替换为实际IP或域名。 - `3306`: 默认端口号,默认情况下无需更改除非自定义过。 - `/your_database_name`: 替换成目标数据库名称。 - 查询字符串部分提供了额外选项以确保兼容性和安全性设置。 对于连接池本身而言,HikariCP是Spring Boot默认采用的数据源实现方式之一,因此通常不需要显式声明其他组件即可获得良好性能表现。不过也可以调整一些高级特性如最大活跃数、最小闲置量等来自定义行为: ```properties spring.datasource.hikari.maximum-pool-size=10 spring.datasource.hikari.minimum-idle=5 ``` 这些值应基于预期负载模式合理设定,过高可能导致不必要的内存占用而过低则可能影响响应速度。 #### 创建Service层进行交互 一旦完成了基础架构层面的工作之后就可以着手编写具体的业务逻辑了。下面给出了一段简单的例子说明如何创建一个服务类来进行基本查询操作[^3]: ```java package com.example.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class ExampleService { private final CardPooledMonthlyUsageMapper mapper; @Autowired public ExampleService(CardPooledMonthlyUsageMapper mapper){ this.mapper = mapper; } /** * 获取所有卡片月度用量记录. */ public List<CardPooledMonthlyUsage> getAllRecords(){ return mapper.queryAll(); } } ``` 这段代码展示了注入持久化接口的方式并通过它执行CRUD方法调用来完成对实体对象的操作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值