【发布时间】:2020-07-12 06:39:18
【问题描述】:
我的应用程序是一种“网络爬虫”形式,它使用the Java Jsoup library 从所需的输入页面加载 HTML。我最近将我的应用程序平台从 Java 8 升级到 Java 11。通过这次升级,我收到了几份来自客户的报告,称他们在尝试加载某些网页的 HTML 内容时收到 SSLHandshakeExceptions。这些出现的网页因设备而异,在某些设备上,我的客户端根本无法加载任何网页(http:// 和 https:// 网页都没有)。
我尝试了多种方式解决此问题,但无济于事:
- 用 Java 8 运行时的 CACERT 文件替换 Java 11 运行时的 CACERT 文件
- 创建一个自定义 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 的原因。我该怎么做?
【问题讨论】: