java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > SpringBoot连接SqlServer出现问题

解决SpringBoot连接SqlServer出现的问题

作者:Anzzm7

在尝试通过SSL与SQL Server建立安全连接时,如果遇到“PKIX path building failed”错误,可能是因为未能正确配置或信任服务器证书,当"Encrypt"属性设置为"true"且"trustServerCertificate"属性设置为"false"时,要求驱动程序使用安全套接字层(SSL)加密与SQL Server建立连接

SpringBoot连接SqlServer出现问题

“Encrypt”属性设置为“true”且 “trustServerCertificate”属性设置为“false”

但驱动程序无法使用安全套接字层 (SSL) 加密与 SQL Server 建立安全连接:

错误:PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target。

通过yml配置时出现了上方的问题

spring:
  datasource:
    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
    username: sa
    password: 123456
    url: jdbc:sqlserver://localhost:1433;databaseName=xxx;

这时候注意你的sql语句不能写错了,不然也会报错

在数据库名后面 ;trustServerCertificate=true 加上这个就可以了

Java连接SqlServer报服务端仅支持TLS10

报错

Invocation of init method failed; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: The driver could not establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption. Error: "The server selected protocol version TLS10 is not accepted by client preferences [TLS13, TLS12]

通过查阅网上资料大部分说原因是Java认为TLSv1不太安全所以在java.security中通过jdk.tls.disabledAlgorithms配置禁用了TLSv1, TLSv1.1,导致Java应用作为SQLServer客户端连接服务时使用的TLS13, TLS12协议,但是SQLServer服务端可能版本比较老或者配置了仅支持TLS10导致报上述错误

原因是最近更新了jdk8的小版本导致Java的安全文件变更了

处理方式

修改基础镜像中的/usr/java/latest/jre/lib/security/java.security文件内容,替换成之前的内容

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文