如何配置Spring Boot通过SSL/TLS连接MariaDB并解决PKIX错误
Spring Boot 配置SSL/TLS连接MariaDB及PKIX错误解决
一、先修正JDBC URL的参数错误
你当前的连接字符串存在参数名拼写错误:
- 错误参数:
keystoreStore、keystoreStorePassword - 正确参数:
keyStore、keyStorePassword(MariaDB JDBC驱动的标准参数名)
另外,MariaDB驱动更推荐使用sslMode替代useSSL,sslMode能明确指定SSL验证级别(如VERIFY_CA、VERIFY_IDENTITY),避免模糊配置。
二、解决PKIX路径构建失败错误
这个错误核心是Java信任库未包含MariaDB服务器的有效证书,导致无法验证服务器身份,按以下步骤处理:
1. 导出MariaDB服务器的证书
用openssl命令提取服务器证书:
openssl s_client -connect xyz:3306 -showcerts < /dev/null | openssl x509 -outform PEM > mariadb-server-cert.pem
替换xyz为你的MariaDB服务器地址,执行后会生成mariadb-server-cert.pem证书文件。
2. 将证书导入信任库
用keytool命令把证书导入到JKS格式的信任库(无信任库时会自动创建):
keytool -importcert -file mariadb-server-cert.pem -alias mariadb-server -keystore truststore.jks
执行时需设置信任库密码(比如你的mypwd),输入yes确认信任该证书。
3. 放置证书文件到正确位置
将生成的truststore.jks(若需双向认证,还要放客户端密钥库keystore.jks)放到Spring Boot项目的src/main/resources目录下。如果放在子目录(如resources/ssl),路径需对应调整为classpath:/ssl/truststore.jks。
三、正确的JDBC连接配置示例
情况1:单向SSL认证(仅验证服务器身份)
spring: datasource: url: jdbc:mariadb://xyz:3306/test?sslMode=VERIFY_CA&trustStore=classpath:/truststore.jks&trustStorePassword=mypwd username: your-username password: your-password
sslMode=VERIFY_CA表示验证服务器证书是否由信任库中的CA签发;若需验证服务器主机名与证书一致,改用sslMode=VERIFY_IDENTITY。
情况2:双向SSL认证(服务器验证客户端,客户端也验证服务器)
spring: datasource: url: jdbc:mariadb://xyz:3306/test?sslMode=VERIFY_CA&trustStore=classpath:/truststore.jks&trustStorePassword=mypwd&keyStore=classpath:/keystore.jks&keyStorePassword=mypwd username: your-username password: your-password
注意:双向认证需MariaDB服务器端已配置信任客户端证书,否则连接会失败。
四、额外检查项
- 确认信任库和密钥库的密码与配置完全一致,密码错误会直接导致认证失败。
- 若使用非JKS格式的密钥库(如PKCS12),需添加
trustStoreType=PKCS12或keyStoreType=PKCS12参数。 - 确保MariaDB服务器已开启SSL功能,且配置的证书有效未过期。
内容的提问来源于stack exchange,提问作者Mittal Vaghela
相关产品推荐
相关产品推荐

