我的应用程序是一种“网页爬虫”,使用Java Jsoup库从所需的输入页面加载HTML。我最近将应用程序平台从Java 8升级到了Java 11。随着这个升级,我收到了几份来自客户的报告,称他们在尝试加载某些网页的HTML内容时收到了SSLHandshakeExceptions错误。出现这种情况的网页因设备而异,在某些设备上,我的客户无法加载任何网页(http://和https://网页都不行)。
我已经尝试了几种方法来解决这个问题,但都没有成功:
- 将Java 11运行时的CACERT文件替换为Java 8运行时的CACERT文件
- 创建一个自定义的SSL证书接受器,该接受器接受所有SSL证书,而不考虑有效性(我知道这对于生产代码来说很糟糕,但这只是为了测试目的)-请参阅在HTTPS上使用HttpClient信任所有证书
目前,我不太确定要采取哪些选项,因为我对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的原因。我该如何做到这一点?