Подтвердить что ты не робот

Неправильное имя хоста HTTPS: должно быть <sub.domain.com>. Что вызывает это?

Я получаю ошибку "HTTPS hostname wrong:" при попытке подключения к серверу с помощью https. Мой url выглядит примерно так.

https://sub.domain.com/tamnode/webapps/app/servlet.

Я подключаюсь, используя следующий код

    // Create a URLConnection object for a URL
    URL url = new URL(requestedURL);
    HttpURLConnection.setFollowRedirects(false);

    // connect
    connection = (HttpURLConnection) url.openConnection();
    connection.setDoOutput(true);
    connection.setRequestProperty("User-Agent", USER_AGENT); //$NON-NLS-1$

    OutputStreamWriter wr = new OutputStreamWriter(connection
            .getOutputStream());

но затем получите ошибку

IOException: HTTPS hostname wrong:  should be <sub.domain.com>. 
    at sun.net.www.protocol.https.HttpsClient.checkURLSpoofing
    ....

Это код, который работал в прошлом, но больше не работает. Были внесены некоторые изменения в архитектуру системы, но мне нужно получить больше данных, прежде чем подойти к ответственным.

Что может вызвать эту ошибку? Можно ли отключить проверку URLSpoofing?

4b9b3361

Ответ 1

Похоже, что сертификат SSL для домена .com был предоставлен sub.domain.com. Или, что более вероятно, домен domain.com был переименован в sub.domain.com без обновления сертификата SSL.

Ответ 2

cletus прав насчет возможной причины.

Существует также способ отключить проверку паролей.

Вы можете создать объект, который реализует HostnameVerifier, который возвращает true при других обстоятельствах, чем "обычный".

Вы заменили бы HostnameVerifier по умолчанию, вызвав setHostnameVerifier в объекте соединения в коде в вопросе.

Этот ответ был "вдохновлен": http://www.java-samples.com/showtutorial.php?tutorialid=211

Я нашел ссылку на этот запрос: http://www.google.com/search?q=https+hostname+wrong+should+be

Еще одно замечание: подумайте дважды, прежде чем делать это. Вы создадите уязвимость, связанную с безопасностью между вашим клиентом и компонентами сервера.

Ответ 3

Я получил это исключение - java.io.IOException: HTTPS hostname wrong: should be <localhost>.

Мое решение - я изменил свой самозаверяющий сертификат и сделаю CN=localhost.

ИЛИ

Добавьте свой сертификат домена cn=<domain-name> в файл хоста, который, вероятно, находится в c:/windows/system32/drivers/etc/...

Ответ 4

Следующий код решил мою проблему

static {
    //for localhost testing only
    javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier(
            new javax.net.ssl.HostnameVerifier() {

        @Override
        public boolean verify(String hostname,
                javax.net.ssl.SSLSession sslSession) {
            if (hostname.equals("your_domain")) {
                return true;
            }
            return false;
        }
    });
}

Ответ 5

Используйте имя хоста (DNS-имя) в качестве имени псевдонима.

Пример:

keytool -import -alias <google.com> -file certificate_one.cer -keystore cacerts

Ответ 6

Java по умолчанию проверяет, что сертификат CN (Common Name) совпадает с именем хоста в URL. Если CN в сертификате не совпадает с именем хоста, ваш клиент веб-службы завершается с ошибкой со следующим исключением: java.io.IOException: HTTPS hostname неправильный: должен быть именем хоста, как в сертификатах.