Узнайте, если URL HTTPS онлайн

1

Мне нужна функция, которая возвращает 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 с тем же сообщением: "Нет сертификата доверенного сервера".

Есть ли способ узнать, находится ли сервер в сети, независимо от того, действителен ли сертификат или нет?

Благодарю!

  • 0
    Возможный дубликат
  • 0
    Нет, извините, но я не спрашиваю, как избежать проверки CA. Действительно, я уже знаю, как это сделать.
Показать ещё 4 комментария
Теги:
ssl

3 ответа

0
Лучший ответ

Я нашел решение. Мне просто нужно проверить, включен ли URL-адрес перед вызовом этой функции. Я могу использовать свой httpsclient без CA подписанной проверки и получить ответ, тогда я вызываю этот метод.

  • 0
    Другими словами, вы игнорировали ConnectException и все равно продолжали проверку сертификата.
  • 0
    Я не игнорировал ConnectException потому что я не получил его!
2

Протестируйте его поддельным URL-адресом, например "https://flimflam.asdfasdfasdfg.com", и посмотрите, что произойдет в вашем случае.

Если следует отключить исключение IOException если соединение не было основано на методе openConnection. Скорее всего, это больше тайм-аут, и вы будете тратить время на ожидание периода ожидания.

  • 0
    Я попытался с поддельным URL и отладить функцию, она выдает то же исключение. Это меня раздражает ...
1

попробуйте использовать con.getResponseCode(); перед con.disconnect(); чтобы получить исключение, которое вы хотите.

  • 0
    Я попробовал, не сработало. Но спасибо! (Бросил то же исключение).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню