Как исправить имя хоста в сертификате не совпадает

Я делаю HTTP-запрос на веб-сайт https, используя Unirest для Java, но у меня проблема с сертификатом SSL. Сообщение об исключении - javax.net.ssl.SSLException: имя хоста в сертификате не совпадает:

Страница: www.ceskereality.cz

Если я открою его в браузере (я использую Google Chrome в Windows 10), он будет работать...

Я пробовал это, но это не работает

SSLContext sslcontext = SSLContexts.custom()
                .loadTrustMaterial(null, new TrustSelfSignedStrategy())
                .build();

SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext,SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
CloseableHttpClient httpclient = HttpClients.custom()
                .setSSLSocketFactory(sslsf)
                .build();
Unirest.setHttpClient(httpclient);

2 ответа

Решение

Сервер требует, чтобы клиент использовал указание имени сервера (SNI) для получения правильного сертификата. Если SNI не используется, сертификат для ci.cz вместо ceskereality.cz возвращается, что вызывает ошибку, которую вы видите.

Я не знаком с Unirest, но вполне вероятно, что используемая вами библиотека не поддерживает SNI или вы используете ее со старой версией Java, в которой не включен SNI.

Загрузите сертификат сервера и поместите его в свои каталоги и перезапустите Java-приложение.

Другие вопросы по тегам