【问题标题】:Monitor a HTTPS connection with URL class (Java)使用 URL 类 (Java) 监视 HTTPS 连接
【发布时间】:2009-07-23 17:35:13
【问题描述】:

我想监控一个简单的网址。但是当它是一个 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) {
    (...)
}

【问题讨论】:

  • 服务器的证书是否可信? IE。由 CA 签署且未过期?如果没有,那么您可能需要进行一些哄骗才能使其正常工作。接受自签名证书可能需要额外的工作。
  • 不,应该是您喜欢测试可用性的任何主机。

标签: java url ssl https monitoring


【解决方案1】:

如果你真的不关心服务器证书的有效性,那么你想设置一个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-samples.com/showtutorial.php?tutorialid=211 现在它工作了。谢谢。
  • 很好的解决方案,但请记住:您只是检查“某些”服务器是否已启动;您丢失了服务器身份验证,因此您无法确定是您自己的身份验证还是欺骗的身份验证。
  • 感谢@Ruben Trancoso,很高兴我能为您指明正确的方向。我会将该链接添加到我的答案中。
  • 很好,@erickson。通过这样做,我们丢弃了 SSL/TLS 的一个重要特性......我将在我的答案中添加一些内容来解决这个问题。
猜你喜欢
  • 2013-03-12
  • 2013-05-19
  • 2011-11-05
  • 2016-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-13
  • 1970-01-01
相关资源
最近更新 更多