Неверное имя хоста HTTPS: должно быть <sub.domain.com>. Что вызывает это? - PullRequest
21 голосов
/ 26 ноября 2009

Я получаю эту ошибку 'HTTPS hostname error:' ошибка при попытке подключиться к серверу с использованием 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?

Ответы [ 6 ]

18 голосов
/ 26 ноября 2009

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

13 голосов
/ 20 июля 2010

Клет прав насчет вероятной причины.

Также есть способ отключить проверку на поддельный.

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

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

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

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

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

8 голосов
/ 31 мая 2012

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

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

OR

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

4 голосов
/ 20 апреля 2015

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

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;
        }
    });
}
0 голосов
/ 24 мая 2019

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

0 голосов
/ 13 апреля 2019

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

Ex:

keytool -import -alias <google.com> -file certificate_one.cer -keystore cacerts
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...