1

如果安全网站的证书由 CA 签名,我需要一个返回 true 的函数。在 Android 中,如果您尝试连接到自签名证书,它会抛出 SSLException,在这种情况下,我只是捕获它并返回 false。您可以检查代码:

public static boolean isValidCertificate(URL url) throws IOException {
    HttpsURLConnection con;
    try {
        con = (HttpsURLConnection) url.openConnection();
        con.connect();
        con.disconnect();
        return true;
    } catch (SSLException e) {
        return false;
    } 
}

我的问题是,如果站点不可用,我希望函数抛出异常。但我刚刚发现 Android 在这种情况下会抛出相同的 SSLException,并带有相同的消息:“没有受信任的服务器证书”。

无论证书是否有效,有没有办法知道服务器是否在线?

谢谢!

4

3 回答 3

2

使用诸如“https://flimflam.asdfasdfasdfg.com”之类的虚假 URL 对其进行测试,看看您的情况会发生什么。

IOException如果没有基于该openConnection方法建立连接,则应该触发。很可能这更像是超时,您将花时间等待超时时间。

于 2012-06-21T17:15:11.163 回答
1

尝试使用con.getResponseCode();beforecon.disconnect();来获得你想要的异常。

于 2012-06-21T17:21:58.783 回答
0

我找到了解决方案。我只需要在调用此函数之前检查 URL 是否在线。我可以在没有 CA 签名检查的情况下使用我的 httpsclient 并获得响应,然后,我调用此方法。

于 2012-06-21T20:49:32.160 回答