You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java 17升级后SQL Server连接字符串trustServerCertificate参数异常求助

升级Java 17后SQL Server连接字符串trustServerCertificate参数被覆盖问题排查

近期将应用升级至Java 17后,出现SQL Server连接异常:连接字符串中明确配置trustServerCertificate=true,但启动时驱动报错显示该参数被设为false,导致SSL连接失败。

连接字符串配置

spring.datasource.url=jdbc:sqlserver://LOCALHOST:1433;databaseName=[mydb];encrypt=true;trustServerCertificate=true

启动错误日志

2023-08-22 12:09:17.746[0;39m [31mERROR[0;39m [35m10768[0;39m [2m---[0;39m [2m[  restartedMain][0;39m [36mcom.zaxxer.hikari.pool.HikariPool       [0;39m [2m:[0;39m HikariPool-2 - Exception during pool initialization.

com.microsoft.sqlserver.jdbc.SQLServerException: "encrypt" property is set to "true" and "trustServerCertificate" property is set to "false" but the driver could not establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption: Error: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target. ClientConnectionId:ae5d4fb9-9813-4ba6-b5d2-c3895eabe0db
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:3957)
    at com.microsoft.sqlserver.jdbc.TDSChannel.enableSSL(IOBuffer.java:1950)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:3477)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:3097)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:2939)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:1801)
    at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1241)
    at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138)
    at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:364)
    at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206)
    at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:476)
    at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561)
    at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:115)
    at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112)
    at org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration.lambda

应用环境

  • STS v4.18.1
  • Eclipse Adoptium JDK jdk-17.0.8.7-hotspot
  • SQLServerDialect:SQLServer2012Dialect
  • SQL Server驱动版本:12.3.0.jre17-preview、12.4.0.jre11(均无效)
  • HikariCP 4.0.3
  • Hibernate 5.6.12
  • Spring Boot 2.7.5

排查方案

  • 检查Spring Boot配置加载优先级:启动时添加--debug参数,查看控制台输出的配置加载详情,确认spring.datasource.url的最终生效值,排查是否有外部配置(如环境变量、系统属性、jar外的application.properties)覆盖了原配置。
  • 检查HikariCP专属配置:查看是否存在spring.datasource.hikari.connection-properties配置项,该配置中的参数会覆盖连接字符串中的对应设置,若其中包含trustServerCertificate=false则会导致问题。
  • 替换兼容的SQL Server驱动:Java 17需使用对应版本的正式驱动,替换为com.microsoft.sqlserver:mssql-jdbc:12.4.0.jre17或更高版本,避免使用预览版或针对低版本Java的驱动。
  • 排查JVM系统属性:检查启动参数中是否设置了sqlserver.trustServerCertificate=false或相关SSL系统属性,这类全局属性会优先于连接字符串中的配置。
  • 检查代码层面的动态修改:排查项目中是否有@Configuration类通过DataSourceBuilder手动设置连接属性,或Hibernate配置中是否存在覆盖SSL参数的逻辑。
  • 启用驱动调试日志:在application.properties中添加logging.level.com.microsoft.sqlserver.jdbc=DEBUG,通过驱动日志追踪参数解析过程,定位trustServerCertificate参数的实际取值来源。

内容的提问来源于stack exchange,提问作者onoma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 20:42:17