带有TLS 1.3的Java 11 SSLHandshakeException:如何恢复到TLS 1.2? [英] Java 11 SSLHandshakeException with TLS 1.3: How do I revert to TLS 1.2?

查看:31
本文介绍了带有TLS 1.3的Java 11 SSLHandshakeException:如何恢复到TLS 1.2?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的应用程序是一种"Web Screper"形式,它使用the Java Jsoup library从所需的输入页面加载HTML。我最近将我的应用程序平台从Java 8升级到Java 11。在这次升级中,我收到了几个来自我的客户的报告,他们说他们在试图加载某些网页的HTML内容时收到SSLHandshakeExceptions。发生这些情况的网页因设备而异,并且在某些设备上,我的客户端根本无法加载任何网页(既不能加载http://也不能加载http://网页)。

我尝试了几种方法来解决这个问题,但都无济于事:

  1. 用Java 8运行时的CACERT文件替换Java 11运行时的CACERT文件
  2. 创建自定义的SSL证书接受器,该证书接受器接受所有的SSL证书,而不考虑其有效性(我知道这不利于生产代码,但这只是出于测试目的)-请参阅Trusting all certificates using HttpClient over HTTPS
在这一点上,我真的不确定要采取什么选项,因为我对SSL、TLS和HTTPS的了解有限。这些错误在Java 8中从未发生过,在升级到Java 11之前一切正常。

据我所知,Java 11对SSL唯一的改变是升级到TLS 1.3,而之前的Java版本依赖于使用TLS 1.2。

因此,我想强制Java 11使用TLS 1.2而不是TLS 1.3,因为我认为这是SSLHandshakeExceptions的原因。我应该如何着手进行此操作?

推荐答案

NeardupeJava 11 HTTPS connection fails with SSL HandshakeException while using Jsoup但我有一些要添加。

使用Connection.sslSocketFactory(factory)和合适的参数。假设使用标准/默认提供者,您可以使用从SSLContext.getInstance("TLSv1.2")创建的工厂,该工厂可能带有默认的信任管理器和密钥管理器,即.init(null,null,null)

或按the JSSE documentation中的表8-3设置jdk.tls.client.protocolshttps.protocols。注意:这可能会影响从同一JVM建立的任何其他SSL/TLS连接或用于HTTPS的其他URLConnection。

不过,如果这解决了您的问题,我会感到惊讶。TLS1.3被推迟了,部分原因是他们添加了黑客攻击,以便不会在旧版1.2(甚至更早的)系统和‘盒’上失败。

这篇关于带有TLS 1.3的Java 11 SSLHandshakeException:如何恢复到TLS 1.2?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆