gpt4 book ai didi

java - 使用 URL 类监视 HTTPS 连接 (Java)

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:04:48 25 4
gpt4 key购买 nike

我想监控一个简单的 url。但是当它是一个 https 服务器时,我得到一个握手异常。是否可以按照浏览器用于连接的方式验证 https url 的状态? (没有本地证书)。我不知道浏览器如何从 https url 获取内容,但我想以同样的方式进行。无需为每个服务器存储特定证书。被监控的https应该是任何人。

try {
URL u = new URL(row.getUrl());
String protocol = u.getProtocol();
if(protocol.equals("https")) {
HttpsURLConnection hc = (HttpsURLConnection)u.openConnection();
System.out.println("Response Code: " + hc.getResponseCode());
hc.disconnect();
}
if(protocol.equals("http")) {
u.openConnection();
u.getContent();
}
System.out.println("url is up.");
} catch (Exception e) {
(...)
}

最佳答案

如果你真的不关心服务器证书的有效性,那么你想设置一个SSLContext有一个 TrustManager那不检查任何东西。然后您需要使用它来设置默认值 SSLSocketFactory进入HttpsURLConnection ,以便在您使用 URL 时使用信任管理器.这是一个例子:

TrustManager[] trustEverything = new TrustManager[] {
new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() { return null; }
public void checkClientTrusted(X509Certificate[] certs, String authType) { }
public void checkServerTrusted(X509Certificate[] certs, String authType) { }
}
};

SSLContext sslctx = SSLContext.getInstance("SSL");
sslctx.init(null, trustEverything, null);

HttpsURLConnection.setDefaultSSLSocketFactory(sslctx.getSocketFactory());

可以找到使用此技术的完整示例 here .

正如@erickson 指出的那样,这意味着您无法确定您是否真的在与您关心的服务器对话。一个更好的解决方案是更新您的信任库以包含您正在与之通信的服务器的自签名证书,而不是忽略所有检查。

关于java - 使用 URL 类监视 HTTPS 连接 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1173315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com