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

StackOverflow https://stackoverflow.com/questions/1802051

  •  05-07-2019
  •  | 
  •  

Вопрос

Я получаю сообщение об ошибке «Неправильное имя хоста HTTPS:» при попытке подключения к серверу с использованием 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?

Это было полезно?

Решение

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

Другие советы

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

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

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

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

ИЛИ

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

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

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;
        }
    });
}

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

Бывший:

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top