java - 使用 jsoup 连接到不受信任的证书
问题描述
我的 java 应用程序有问题。我使用 JSOUP 连接到一个网站,该网站曾经是 http,现在已移至 https。现在,当我运行应用程序时,我收到以下错误,有没有人可以帮助解决这个问题?
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.provider.certpath.SunCertPathBuilder.build(Unknown Source)
at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(Unknown Source)
at java.security.cert.CertPathBuilder.build(Unknown Source)
... 32 more
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.ssl.Alerts.getSSLException(Unknown Source)
at sun.security.ssl.SSLSocketImpl.fatal(Unknown Source)
at sun.security.ssl.Handshaker.fatalSE(Unknown Source)
at sun.security.ssl.Handshaker.fatalSE(Unknown Source)
at sun.security.ssl.ClientHandshaker.serverCertificate(Unknown Source)
at sun.security.ssl.ClientHandshaker.processMessage(Unknown Source)
at sun.security.ssl.Handshaker.processLoop(Unknown Source)
at sun.security.ssl.Handshaker.process_record(Unknown Source)
at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(Unknown Source)
解决方案
如果您信任该站点,则可以通过将其设置为 true 来忽略 http 错误:
Document doc = Jsoup.connect("your_url").ignoreHttpErrors(true).get();
并忽略 TSL 验证,设置 validateTLSCertificates(false):
Document doc = Jsoup.connect("your_url").validateTLSCertificates(false).get();
编辑
此答案已过时,因为 JSoup 在 1.12.1 版本中已弃用并删除了 validateTLSCertificates 方法
(https://jsoup.org/news/release-1.12.1)。
如果您信任有问题的站点并想忽略 TLS 验证,请查看此答案how-to-resolve-jsoup-error-unable-to-find-valid-certification-path
推荐阅读
- reactjs - React + Redux + Storybook:在编写故事书故事时如何使用连接的 React 路由器的 useParams?
- scala - 在 IntelliJ 中使用 Gradle 构建具有依赖项的 Jar,包括多个主类
- spring-data-jpa - 如何转换为 JPQL 用于内联视图?
- c++ - 仅当我们在优先级队列中使用自定义比较器时才需要传递容器类型?
- javascript - 根据重复出现修改数组值
- ios - 我可以使用 NavigationController 来解除屏幕移动吗?
- php - 如何在 PHP 标记 echo 内的脚本中使用 jquery 变量?
- javascript - 在 Django 中弹出消息
- react-native - React Native 是否支持 Apple 的 M1 macbook pro?
- python - 合并 csv 值并输出到 csv