【发布时间】:2019-01-02 09:44:53
【问题描述】:
我正在尝试获取网站的 HTML 源代码。
我的代码:
public static void main(String[] args) {
URL url;
InputStream is;
try {
url = new URL("https://www.trackobot.com/");
is = url.openStream();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
但是,当运行这段代码时,我得到一个异常:
javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.Alerts.getSSLException(Alerts.java:154)
at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:2023)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1125)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1546)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1474)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)
at java.net.URL.openStream(URL.java:1045)
at JsoupTutorial.ConnectToUrl.main(ConnectToUrl.java:24)
如果我更改网站,它会运行良好,即使是 PayPal 等 https 网站。但是,我仍然有一些站点无法正常工作并抛出异常。示例中的这个站点是它不起作用的站点之一。
我搜索了一下,了解到需要将此站点的证书导入Java keystore。 我说的对吗?
我的问题是 Chrome 如何设法进入那些“安全”网站并获取 HTML 代码?有人必须将证书更新(导入)到 Chrome Cer 数据库。谁执行此操作以及何时发生? (以防我在上面是正确的)。
无论如何,我想设法完美地加载这些网站并接收我想要的数据。我在哪里可以从基础学习它?
谢谢。
【问题讨论】:
-
请看这个以获得完整的解释stackoverflow.com/a/34111150 和这个让我们加密证书兼容性列表letsencrypt.org/docs/certificate-compatibility
标签: java handshake sslhandshakeexception