使用 jsoup 连接到不受信任的证书
Using jsoup to connect to untrusted certificate
我的 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 验证,请查看此答案
我的 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 验证,请查看此答案