【发布时间】:2012-06-21 17:03:03
【问题描述】:
如果安全网站的证书由 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,并显示相同的消息:“没有受信任的服务器证书”。
无论证书是否有效,有没有办法知道服务器是否在线?
谢谢!
【问题讨论】:
-
npe,很抱歉,但我不是在问如何避免 CA 检查。确实,我已经知道该怎么做。
-
然后也许发布你得到的异常的完整堆栈跟踪。以及用于信任所有证书的代码。
-
我的代码是可以的,但是我做错了,谢谢你,因为我一直在想你的上一篇文章,我找到了解决方案。我会发布它。
-
' 如果站点不可用... Android 在这种情况下会抛出相同的 SSLException,并带有相同的消息:“没有受信任的服务器证书”。我觉得这难以置信。它会抛出
ConnectException、NoRouteToHostException、UnknownHostException等。你一定在做一些很奇怪的事情。