Docker部署Java时报错:server selected protocol version TLS10 is not accepted by client preferences [TLS12]

项目场景:

在使用Docker进行构建Java镜像后并运行容器,以下是Dockerfile文件

FROM openjdk:8-jdk
WORKDIR /app
RUN apt-get update && apt-get install -y curl wget
CMD ["java", "-jar", "app_Object-1.0-SNAPSHOT.jar"]

问题描述

在运行容器后查看日志发现以下报错:

The server selected protocol version TLS10 is not accepted by client preferences [TLS12] 

原因分析:

SqlServer 服务器只接受 TLS1.0,在进入容器后查询jre内的java.security文件找到jdk.tls.disabledAlgorithms配置发现新版的 JDK 不推荐使用旧的 TLSV1.0 的协议,而Springboot JDK1.8使用的是 TLS1.2

jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1 ,RC4, DES, MD5withRSA, \
    DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC ,anon, NULL, \
    include jdk.disabled.namedCurves


解决方案:

提示:那么根据思路,我们需要让springboot使用TLS1.0 就可以使用了。

在java.security配置文件中将LSv1, TLSv1.1, 3DES_EDE_CBC 删除,就可以使用TLS1.0 了。

如果我们在容器内直接删除 LSv1, TLSv1.1, 3DES_EDE_CBC 然后重启的话,问题依然不能得到解决。

正确做法:

在通过Dockerfile构建镜像的时候直接将java.security配置中 LSv1, TLSv1.1, 3DES_EDE_CBC配置删除。

修改后的Dockerfile,将/usr/local/openjdk-8/jre/lib/security/java.security替换为自己真实路径

FROM openjdk:8-jdk
WORKDIR /app
RUN apt-get update && apt-get install -y curl wget
#删除java.security文件中的TLSv1, TLSv1.1,3DES_EDE_CBC
RUN sed -i -e '703,+2s/TLSv1,//' -e '703,+2s/TLSv1.1,//' -e '704,+2s/3DES_EDE_CBC,//' /usr/local/openjdk-8/jre/lib/security/java.security
CMD ["java", "-jar", "app_Object-1.0-SNAPSHOT.jar"]

❀❀❀重新发布后测试,问题解决❀❀❀

拓展

如果Springboot项目使用的是mssql-jdbc >> 8.4.*.jre8

<dependency>
   <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>mssql-jdbc</artifactId>
    <version>8.4.*.jre8</version>
</dependency>

在运行项目时会出现下面警告:

TLSv1 was negotiated. Please update server and client to use TLSv1.2 at minimum.

结局这个非常简单,只需要把mssql-jdbc版本降到8.2.*.jre8即可消除告警

<dependency>
   <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>mssql-jdbc</artifactId>
    <version>8.2.*.jre8</version>
</dependency>
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值