Мне нужна функция, которая возвращает true, если сертификат защищенного веб-сайта подписан CA. В 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 с тем же сообщением: "Нет сертификата доверенного сервера".
Есть ли способ узнать, находится ли сервер в сети, независимо от того, действителен ли сертификат или нет?
Благодарю!
Я нашел решение. Мне просто нужно проверить, включен ли URL-адрес перед вызовом этой функции. Я могу использовать свой httpsclient без CA подписанной проверки и получить ответ, тогда я вызываю этот метод.
ConnectException
и все равно продолжали проверку сертификата.
ConnectException
потому что я не получил его!
Протестируйте его поддельным URL-адресом, например "https://flimflam.asdfasdfasdfg.com", и посмотрите, что произойдет в вашем случае.
Если следует отключить исключение IOException
если соединение не было основано на методе openConnection
. Скорее всего, это больше тайм-аут, и вы будете тратить время на ожидание периода ожидания.
попробуйте использовать con.getResponseCode();
перед con.disconnect();
чтобы получить исключение, которое вы хотите.