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

报错信息:

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

参考链接:如何解决由于TLS版本不兼容导致的问题_Java_JefferLiu_InfoQ写作社区

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_34680736/article/details/140772358

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

照猫画狐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值