MsSQL 驱动程序无法使用安全套接字层 (SSL) 建立安全连接?

问题描述 投票:0回答:2

我使用标准驱动程序 com.microsoft.sqlserver.jdbc.SQLServerDriver 连接到 MSSQL 服务器。我在 Eclipse 中运行我的程序并遇到错误:

Failed to obtain JDBC Connection; 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]"

我的环境是openjdk版本“11.0.11”2021-04-20 LTS并且该项目在Eclipse中使用相同的JRE系统库。奇怪的是,我将我的项目打包到 JAR 中,它在另一台机器上运行良好,即 openjdk version "11.0.9.1" 2020-11-04 LTS.

几个月前,我可以在开发环境中运行我的程序,但现在失败了。这段时间可能对开发环境做了一些改动,所以不知道和JDK版本有没有关系

欢迎任何提示,并提前谢谢您。

sql-server tls1.2
2个回答
0
投票

感谢施密茨IT!该线程实际上引导我找到一个可行的解决方案,我想在此处重新发布该解决方案以记录!

https://aws.amazon.com/blogs/opensource/tls-1-0-1-1-changes-in-openjdk-and-amazon-corretto/

上面的文章有一些对我有用的有价值的信息:

  • JDK8 8u292 及更高版本、JDK11 11.0.11 及更高版本、JDK16 禁用 TLS 1.0 和 1.1
  • 修改(删除 TLSv1 和/或 TLSv1.1)jdk.tls.disabledAlgorithms(位于 jre/lib/security 文件夹(对于 OpenJDK 8)或 conf/security(对于 OpenJDK 11))的 java.security 配置文件中及更高版本将启用旧版 TLS!

PS。但是添加一个文件enableLegacyTLS.security来覆盖java.security中的设置对我来说不起作用(OpenJDK 11)。不知道为什么。


0
投票

我最近遇到了这个问题,这是因为我尝试使用最新版本的 SQL Server JDBC 驱动程序(版本 12.2.0)连接到旧版本的 Microsoft SQL Server(2012 年,版本 11.00.3156)较新版本的 JDK(版本 11.0.15)。

发生这种情况是因为新版本的 JDK 默认情况下禁用一些旧的安全算法,如 TLSv1.0(有利于旧的 SQL Server 需要的安全算法,如 TLSv1.2/TLSv1.3)。

为了解决这个问题,我将 JDBC 驱动程序更改为旧版本 8.2.2,并且必须将一些 java 安全虚拟机选项传递给 JDK 以覆盖一些安全配置并从禁用的算法中删除 TLSV1.0

传递给 JDK 的 VM 选项

-Djdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL

(注意,TLSv1.0和TLSv1.1已从原来的JDK列表中删除)

这样做我成功连接到旧的 SQL Server 2012。希望这对您有帮助

© www.soinside.com 2019 - 2024. All rights reserved.