解决SpringBoot连接SqlServer出现的问题
作者:Anzzm7
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文件内容,替换成之前的内容
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。