【问题标题】:SQL Server/Spring Boot: PKIX path building failed: unable to find valid certification path to requested targetSQL Server/Spring Boot:PKIX 路径构建失败:无法找到请求目标的有效认证路径
【发布时间】:2022-10-18 01:22:51
【问题描述】:

我在本地计算机上安装 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,程序会显示错误消息,但它并没有中止运行。

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

我的依赖:

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

在 SQL Server 中,我创建了一个包含表和数据的数据库。

你们中有人对如何解决此错误有进一步的建议吗?

【问题讨论】:

  • 为什么要从随机网站下载证书以添加到您的密钥库中?
  • 您是否使用 JDBC Driver 10.2 for SQL Server(或更高版本)? 10.2 引入了一项重大更改,默认情况下应用 Encrypt=true,参考:JDBC Driver 10.2 for SQL Server Released
  • SQL Server 安装有自己的自签名证书,您需要将公钥添加到您的密钥存储中。您可以通过 SQL Server(版本)配置管理器 > SQL Server 网络配置 > 右键单击​​(您的实例名称)的协议 > 属性 > 证书选项卡找到它。单击“查看”按钮,然后在打开的证书对话框中,单击“详细信息”选项卡和“复制到文件...”按钮以导出其公钥。然后,您可以将该公钥添加到您的密钥库中。
  • @AlwaysLearning:认为这是正确的答案,因为它解决了问题。我真的很感谢你的帮助!!
  • @AlwaysLearning 证书中的查看按钮被禁用,你能帮忙吗?

标签: java sql-server spring-boot ssl pkix


【解决方案1】:

我在使用 spring boot 2.7.4 时遇到了同样的问题

它似乎从您正在使用驱动程序 10.2.X 的 cmets

事实证明,从 2.7.0 开始,JDBC驱动程序 10.2用于 SQL Server
代替9.4.1.jre8对于 2.6.x

因此,您有 2 个对我有用的解决方案中的 1 个:

1.使用老版本的mssql-jdbc驱动

    <properties>    
        <mssql-jdbc.version>9.4.1.jre8</mssql-jdbc.version>
    </properties>

2. 或者要求驱动程序只信任 Sql 服务器证书是什么
您可以通过将其添加到连接字符串来做到这一点:

jdbc:sqlserver://hOSt:pORt;databaseName=dbName;encrypt=true;trustServerCertificate=true

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-03
    • 2019-04-14
    • 1970-01-01
    • 2020-03-25
    • 2013-02-03
    • 2018-07-15
    • 2014-01-31
    相关资源
    最近更新 更多