今天写定时任务同步SQL server数据库的时候,在连接数据库的时候报错,检测到当前数据库使用的协商使用的是 TLSv1 协议,而项目中使用的时jdk17,它的协议版本高,不兼容 TLSv1 协议。
由于是和医院对接,医院使用的SQL server数据库,版本很低,不能改医院的版本,只能修改Java代码了,更改jdk配置文件,并修改SQL server的驱动版本。
在Java代码层面使用jdbc驱动连接SQL server数据库时报错:TLSv1 was negotiated.Please update server and client to use TLSvl.2 at minimum。检测到当前协商使用的是 TLSv1 协议,请将服务器和客户端升级至最低 TLSv1.2 版本以增强安全性。
1.报错原因:
客户端和服务器之间的 SSL/TLS 协商使用了 TLSv1,但建议至少使用 TLSv1.2。这通常是因为客户端或服务器的配置较低,或者客户端和服务器之间的 TLS 版本不匹配。
2.解决方案:
2.1打开jdk配置文件,修改配置,降低协议的版本号。
打开本地jdk17的目录进入\conf\security,找到java.security文件并打开。大约在726行,原来是这样的:
jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, \
DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL
将其替换
#TLSv1, TLSv1.1,
jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, \
DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL
2.2.打开项目中的pom.xml文件,找到SQL server的驱动包 并将其替换为低版本:
<dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>sqljdbc4</artifactId> <version>4.0</version> </dependency>
这样就能连接成功了!