Spring Boot Starter Parent 2.7.*版本连接SQL Server数据库失败
Spring Boot 2.7.*连接SQL Server出现SSL证书错误的原因及解决办法
可能的问题原因
- JDBC驱动版本默认升级:Spring Boot 2.7.相比2.6.,默认依赖的
mssql-jdbc驱动版本更高。新版本驱动默认启用了严格的SSL证书校验(默认trustServerCertificate=false),而旧版本驱动可能默认允许跳过证书校验,或者对证书的处理逻辑不同,导致之前无需配置就能连接,升级后触发证书信任问题。 - 数据源默认配置变更:Spring Boot 2.7.*在数据源自动配置上有细微调整,可能移除了某些隐式的SSL兼容配置,使得原本被覆盖的证书校验逻辑生效。
解决办法
1. 临时跳过证书校验(开发环境适用)
在数据库连接URL中添加trustServerCertificate=true参数,让客户端信任服务器的证书,无需导入到本地信任库:
spring.datasource.url=jdbc:sqlserver://your-server:1433;databaseName=your-db;trustServerCertificate=true
2. 导入证书到JVM信任库(生产环境推荐)
将SQL Server的SSL证书导入到JVM的信任证书库中,步骤如下:
- 导出SQL Server的证书(可通过SQL Server配置工具或浏览器访问数据库端口获取);
- 使用
keytool命令导入证书到JRE的cacerts文件(默认路径:$JAVA_HOME/jre/lib/security/cacerts):
keytool -importcert -file /path/to/sqlserver-cert.cer -alias sqlserver-cert -keystore $JAVA_HOME/jre/lib/security/cacerts
默认证书库密码为changeit,执行后按提示确认导入即可。
3. 锁定JDBC驱动版本(临时兼容方案)
如果暂时不想适配新版本驱动,可以在pom.xml中指定2.6.*版本使用的mssql-jdbc版本,强制降级驱动:
<dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>mssql-jdbc</artifactId> <version>9.4.1.jre8</version> <!-- 替换为2.6.*使用的驱动版本 --> </dependency>
注意:此方案仅作为临时过渡,长期建议适配新版本驱动及标准SSL配置。
内容的提问来源于stack exchange,提问作者S-Wing
相关产品推荐
相关产品推荐

