带有TLS 1.3的Java 11 SSLHandshakeException:如何还原为TLS 1.2?

问题描述 投票:1回答:1

我的应用程序是“网络抓取工具”的一种形式,它使用the Java Jsoup library从所需的输入页面加载HTML。我最近将应用程序平台从Java 8升级到了Java11。通过此升级,我收到了一些来自客户的报告,这些报告说它们在尝试加载某些网页的HTML内容时收到SSLHandshakeExceptions。这些网页出现的位置因设备而异,并且在某些设备上,我的客户端根本无法加载任何网页(无论http://还是https://网页)。

我尝试了几种解决方法,但无济于事:

  1. 用Java 8运行时的CACERT文件替换Java 11运行时的CACERT文件
  2. 创建一个自定义SSL证书接受器,无论有效性如何,它都接受所有SSL证书(我知道这对生产代码不利,但这只是出于测试目的-请参阅Trusting all certificates using HttpClient over HTTPS] >>
  3. 到目前为止,由于我对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的原因。我应该如何去做?

我的应用程序是“网络抓取工具”的一种形式,它使用Java Jsoup库从所需的输入页面加载HTML。我最近将我的应用程序平台从Java 8升级到了Java11。使用此...

java ssl tls1.2 java-11
1个回答
1
投票

Neardupe Java 11 HTTPS connection fails with SSL HandshakeException while using Jsoup,但我要添加一些。

Connection.sslSocketFactory(factory)与适当的参数一起使用。假设使用标准/默认提供程序,则可以使用由SSLContext.getInstance("TLSv1.2")创建的工厂,可能带有默认的trustmanager和keymanager即.init(null,null,null)

© www.soinside.com 2019 - 2024. All rights reserved.