记录jdk21连接SQLServer因为TLS协议报错问题

 更新时间:2024年10月09日 08:57:16   作者:照猫画狐  
在使用Druid连接池连接SQL Server时,可能会遇到因TLS版本不匹配导致的连接失败问题,具体表现为客户端使用TLS1.3或TLS1.2,而SQL Server仅支持TLS1.0,导致无法建立安全连接,解决方法是修改JDK的安全配置,启用TLS1.0

报错信息

com.alibaba.druid.pool.DruidDataSource - create connection SQLException, url: jdbc:sqlserver://192.168.60.93;databaseName=THIS4, errorCode 0, state 08S01 com.microsoft.sqlserver.jdbc.SQLServerException: “Encrypt”属性设置为“true”且 “trustServerCertificate”属性设置为“false”,但驱动程序无法使用安全套接字层 (SSL) 加密与 SQL Server 建立安全连接:错误:The server selected protocol version TLS10 is not accepted by client preferences [TLS13, TLS12]。

解决方案

从报错信息上来看,是因为客户端使用的协议版本是TLS1.3和TLS1.2,与服务器支持的版本TLS1.0不匹配导致握手失败。

百度上查阅得知从JDK8开始,默认使用的TLS版本是TLS 1.2,JDK17默认使用的TLS版本是TLS 1.3,但是JDK17已经在默认的安全配置中,把TLS1.0和TLS1.1禁用掉了。

以下是启用TLS1.0的操作方法,操作完需要重启服务:

#jdk11+ 配置文件位置
#例:C:\Program Files\Java\jdk-21\conf\security\java.security
$JAVA_HOME/conf/security/java.security

# jdk8及以下 配置文件位置
#例:C:\Program Files\Java\jre1.8.0_421\lib\security\java.security
$JRE_HOME/lib/security/java.security

#找到里面的一行配置:
jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, \
    DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL

#说明:JDK中的jdk.tls.disabledAlgorithms参数用于禁用不安全或不需要的TLS密码算法,
#以提高系统的安全性。通过配置这个参数,可以指定JDK不支持的密码算法或协议,以降低它们的优先级,
#减少被攻击的风险。

#我们把TLSv1,TLSv1.1这两个删除掉,变成如下:
jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, \
    DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL

总结

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

相关文章

  • JavaFX实现UI美观效果代码实例

    JavaFX实现UI美观效果代码实例

    这篇文章主要介绍了JavaFX实现UI美观效果代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • Java的关键字与标识符小结

    Java的关键字与标识符小结

    这篇文章主要介绍了Java的关键字与标识符,总结整理了Java各种常见的关键字与标识符功能、用法及操作注意事项,需要的朋友可以参考下
    2020-04-04
  • spring scheduled单线程和多线程使用过程中的大坑

    spring scheduled单线程和多线程使用过程中的大坑

    本文主要介绍了spring scheduled单线程和多线程使用过程中的大坑,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • Java实现Android拼图游戏设计过程解析

    Java实现Android拼图游戏设计过程解析

    这篇文章主要介绍了Java实现Android拼图游戏设计过程解析,下面文章要接受的这是一款基于 Java 开发的移动端安卓小游戏,可以作为大家在学习期间的一个小练习,接下来和小编一起进入文章学习具体内容吧
    2022-02-02
  • JVM如何处理异常深入详解

    JVM如何处理异常深入详解

    异常处理的两大元素:抛出异常、捕获异常,非正常处理的两个方法。下面这篇文章主要给大家介绍了关于JVM如何处理异常的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2019-01-01
  • 如何在Maven项目中运行JUnit5测试用例实现

    如何在Maven项目中运行JUnit5测试用例实现

    这篇文章主要介绍了如何在Maven项目中运行JUnit5测试用例实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • JDK源码分析之String、StringBuilder和StringBuffer

    JDK源码分析之String、StringBuilder和StringBuffer

    这篇文章主要给大家介绍了关于JDK源码分析之String、StringBuilder和StringBuffer的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用jdk具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-05-05
  • idea2017建立jsp工程及tomcat配置教程

    idea2017建立jsp工程及tomcat配置教程

    本文通过图文并茂的形式给大家介绍了idea2017建立jsp工程及tomcat等配置的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-02-02
  • 浅析 ArrayList 和 LinkedList 有什么区别

    浅析 ArrayList 和 LinkedList 有什么区别

    ArrayList 和 LinkedList 有什么区别,是面试官非常喜欢问的一个问题。今天通过本文给大家详细介绍下,感兴趣的朋友跟随小编一起看看吧
    2020-10-10
  • Java中Jedis基本使用

    Java中Jedis基本使用

    Redis的Java实现的客户端,本文主要介绍了Java中Jedis基本使用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-05-05

最新评论