最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Java 8 默认禁用 TLSv1 导致 SQLServer 连接失败

网站源码admin2浏览0评论

Java 8 默认禁用 TLSv1 导致 SQLServer 连接失败

一个月前为一个老项目升级了 JDK 版本,现在整个环境都使用 Docker 镜像启动,Web 服务一切正常,测试也验收通过了。

最近运维同学找过来说有一批新数据没有同步过来,查询了表数据和日志基本判定是定时任务的问题,找过找到日志定位发现错误,具体是定时任务在连接 SQLServer 服务器时出错:

代码语言:javascript代码运行次数:0运行复制
The driver could not establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)

搜索发现是因为 Java 8 在新版本中将 TLSv1.0 和 TLSv1.1 禁用了,而项目中 SQLServer 驱动使用的正是 TLSv1。

首先找到 jre 目录:

代码语言:javascript代码运行次数:0运行复制
$ env | grep JAVA_HOME
JAVA_HOME=/opt/java/openjdk
$ cd /opt/java/openjdk/jre/lib/security/
$ vim java.security

编辑 java.security 文件,然后找到 jdk.tls.disabledAlgorithms 属性中删除 TLSv1 和 TLSv1.1,修改完如下:

代码语言:javascript代码运行次数:0运行复制
...
jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, \
    DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, \
    include jdk.disabled.namedCurves
...

然后重启 Web 应用即可。不过我这里是通过容器启动的,我的做法是将 java.security 在本地存储一份,修改完成后通过挂载的方式放进容器中,配置如下:

代码语言:javascript代码运行次数:0运行复制
version: '3'
services:
  tomcat_task:
    image: tomcat:8.5.85-jdk8-temurin-jammy
    container_name: tomcat_task
    environment:
      TZ: "Asia/Shanghai"
    volumes:
      - ./java/conf/java.security:/opt/java/openjdk/jre/lib/security/java.security
      - ./tomcat/conf/server.xml:/usr/local/tomcat/conf/server.xml
      - ./tomcat/conf/web.xml:/usr/local/tomcat/conf/web.xml
      - ./tomcat/webapps:/usr/local/tomcat/webapps
      - ./tomcat/logs:/usr/local/tomcat/logs

重启容器生效。

发布评论

评论列表(0)

  1. 暂无评论