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

本地Spring Boot连接SQL Server遇PKIX证书路径错误求助

PKIX路径构建失败问题排查建议

问题背景

本地安装SQL Server并集成到Spring Boot应用后,启动Tomcat时出现以下错误:

'PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target'. ClientConnectionId:85411829-6853-4fdb-9373-b4c93e1d5e8f

已查阅大量相关文档并尝试多种方案,但均未解决。仅当将application.properties中的spring.jpa.hibernate.ddl-auto设为none时,程序虽报错但不会终止运行。SQL Server中已创建含表和数据的目标数据库。

已执行操作

  • 从网站下载随机SSL证书并添加到Java目录的cacert文件中
  • 配置Spring Boot适配SQL Server
  • 为SQL Server配置SSL加密

当前配置

application.properties

spring.datasource.url=jdbc:sqlserver://localhost;databaseName=Car
spring.datasource.username=admin
spring.datasource.password=password123
spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.jpa.hibernate.ddl-auto=none
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.SQLServer2012Dialect
server.port=8443
server.ssl.key-alias=selfsigned_localhost_sslserver
server.ssl.key-password=changeit
server.ssl.key-store=classpath:ssl-server.jks
server.ssl.key-store-provider=SUN
server.ssl.key-store-type=JKS

Maven依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>com.microsoft.sqlserver</groupId>
        <artifactId>mssql-jdbc</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

解决建议

  1. 修正JDBC URL的SSL参数
    当前JDBC URL未配置SSL相关参数,SQL Server启用SSL后,JDBC连接需明确证书验证规则。先添加参数测试连接:

    spring.datasource.url=jdbc:sqlserver://localhost;databaseName=Car;encrypt=true;trustServerCertificate=true
    

    注:trustServerCertificate=true仅用于临时测试,生产环境必须使用合法可信的证书。

  2. 导入SQL Server的正确证书
    之前添加的随机网站证书完全无效,必须使用SQL Server自身的SSL证书:

    • 打开SQL Server配置管理器,依次进入「SQL Server网络配置」→「实例协议」→ 右键点击「属性」→「证书」选项卡,选中已配置的证书,点击「查看」后导出为Base64编码的CER格式文件。
    • 使用keytool命令将证书导入Spring Boot运行所用JDK的cacerts库:
      keytool -importcert -file sqlserver-cert.cer -alias sqlserver-local -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit
      

    注意:务必确认$JAVA_HOME指向的是Spring Boot实际运行的JDK,避免导入到错误的信任库。

  3. 使用应用专属信任库(可选)
    若不想修改系统级cacerts,可配置Spring Boot使用自定义信任库:

    spring.datasource.hikari.data-source-properties.trustStore=classpath:sqlserver-truststore.jks
    spring.datasource.hikari.data-source-properties.trustStorePassword=changeit
    

    先将SQL Server证书导入到这个自定义的JKS文件中,命令示例:

    keytool -importcert -file sqlserver-cert.cer -alias sqlserver-local -keystore sqlserver-truststore.jks -storepass changeit
    
  4. 验证SQL Server SSL配置有效性
    使用SQL Server Management Studio连接时,勾选「连接属性」中的「加密连接」,确认能正常连接,排除SQL Server端SSL配置错误。

  5. 检查JVM启动参数
    确认Spring Boot启动时未被指定错误的信任库参数,比如-Djavax.net.ssl.trustStore若被错误设置,会覆盖默认的cacerts路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 20:57:16