新浪博客

古老的sqlserver2005和JDK之间的故事

2022-04-07 17:02阅读:
工作中遇到一个问题,程序连sqlserver2005的时候能连通,但是看不到表信息。本地装了一个开发版后发现果然如此。在微软官网找到一些古老的JDBC,试到4.2发现行,就发给现象。这是一个故事的开始。 JDBC换成,重启程序,结果连通测试直接报错:
An error occurred while trying to connect to the database: (classname:com.microsoft.sqlserver.jdbc.SQLServerDriver)
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“SQL Server 未返回响应。连接已关闭。。。。。。
百度一番,说是由于JDK8的高版本不允许使用DES算法,而sqlserver的连接使用了DES算法,因此去修改jre\lib\security下的java.security,将
jdk.tls.disabledAlgorithms=SSLv3, RC4, MD5withRSA, DH keySize < 1024, \
EC keySize < 224, DES40_CBC, RC4_40, 3DES_EDE_CBC
改成了
jdk.tls.disabledAlgorithms=SSLv3, RC4, MD5withRSA, DH keySize < 1024, \

EC keySize < 224, DES40_CBC, RC4_40
去掉了最后的3DES_EDE
_CBC
重启程序后依然报错,给我整不会了。
多找了几台服务器连sqlserver2005,在有一台服务器上复现了,错误不太一样,是:

An error occurred while trying to connect to the database: (classname:com.microsoft.sqlserver.jdbc.SQLServerDriver)
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 [TLS12]'. ClientConnectionId:dc9180fd-c7e7-444b-b740-7d358e0a216b
还是修改java.security文件,这回成功了,说明如果报TLS10的错误是可以通过这种调整安全文件解决。
后来在一篇文章中看到这个JDK的是从8u171开始,默认disable了3DES算法,于是下载了162版本,换到服务器上后重启程序,连接成功。说明就是JDK版本导致的连接问题。

我的更多文章

下载客户端阅读体验更佳

APP专享