我需要一个函数,如果安全网站的证书由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,并带有相同的消息:"没有受信任的服务器证书"。
有没有办法知道服务器是否在线,无论证书是否有效?
谢谢!
使用诸如"https://flimflam.asdfasdfasdfg.com"之类的虚假 URL 对其进行测试,看看在您的案例中会发生什么。
如果没有基于openConnection
方法建立连接,则应触发IOException
。这很可能更像是超时,您将花时间等待超时期限。
尝试在con.disconnect();
之前使用con.getResponseCode();
来获取所需的异常。
我找到了解决方案。我只需要在调用此函数之前检查 URL 是否在线。我可以在没有 CA 签名检查的情况下使用我的 httpsclient 并获得响应,然后,我调用此方法。