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

问题描述

java应用调用HTTPS服务器的接口时报错:
The server selected protocol version TLS10 is not accepted by client preferences [TLS12].

原因分析

HTTPS服务器使用的TLS协议的版本是TLSv1.0,而TLSv1.0、TLSv1.1都过时了(现代浏览器已经停止支持TLSv1.0和TLSv1.1,HTTPS服务器至少应该在TLS1.2上运行。如果站点仍然使用旧的TLS版本,则可能会触发ERR_SSL_VERSION_OR_CIPHER_MISMATCH错误。),高版本的 JDK 禁用了 TLSv1.0。

参考链接:

https://blog.csdn.net/wangjingyuing/article/details/121060124
https://cloud.tencent.com/developer/article/2127522
https://www.jianshu.com/p/35a5edb23d96

解决方法:

方法1: 直接修改java.security文件

打开 java.security 文件之后,修改 jdk.tls.disabledAlgorithms= 后面的值,删除 TLSv1, TLSv1.1 和 3DES_EDE_CBC 即可。

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

方法2: 增加额外的java.security文件,配置jdk.tls.disabledAlgorithms选项,不包含TLSv1, TLSv1.1:

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

运行JAR包时使用命令行:
-Djava.security.properties=
URL是额外的java.security文件的绝对路径,用以覆盖java.security文件中jdk.tls.disabledAlgorithms的值。

方法3: 降低JDK版本。

作者采取的是方法3,即降低JDK版本。因为使用Podman部署java应用,JDK是在Podmanfile中指定的:

                                 FROM openjdk:8

镜像中默认安装openjdk-8u342,即JDK_VERSION=1.8.0_342,这个版本的JDK禁用了TLSv1:
在这里插入图片描述
Podmanfile修改为:

                            FROM openjdk:8u212-jre

JDK版本降低为1.8.0_212。
Podman重新打镜像再部署就OK了。

注意: 有些低版本JDK可能没有对应的docker镜像,所以这里采用了8u212-jre。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值