Java отключает проверку SSL

Java отключает проверку SSL ФСС

Java отключает проверку SSL

Иногда, когда мы пытаемся подключиться к URL-адресу, вы можете получить ошибку SSLHandshakeException или IOException. Причиной этой ошибки является невозможность установить соединение с шифрованием SSL.

В Java, когда мы пытаемся открыть соединение SSL, реализация протокола SSL в JSSE выполняет некоторый процесс проверки, чтобы проверить, является ли запрошенный хост реальным или поддельным. Эта проверка включает проверку сертификата X.509 сервера.

В этой статье будет показано, как отключить проверку сертификата при создании HTTP-соединения. Кроме того, мы напишем пример кода с пояснениями по теме, чтобы его было легко понять.

Отключение или обход проверки сертификата SSL никогда не является рекомендуемым решением проблем SSL, но в тестовой среде — иногда это может вам понадобиться. В этом уроке я создаю экземпляры org.apache.http.impl.client. DefaultHttpClient доступен до версии библиотеки Apache HTTP 4.2 и org.apache.http.impl.client. CloseableHttpClient доступен начиная с версии HTTP-библиотеки Apache 4.3.

DefaultHttpClient теперь является устаревшим классом, поэтому предлагается использовать класс CloseableHttpClient. Не забывайте обходить проверку SSL только в целях отладки, когда мы хотим протестировать несколько защищенных API без настройки установки сертификата на локальном компьютере.

При работе с HTTP-клиентами в Java мы часто получаем исключение проверки сертификата, как показано ниже.

Вызвано: sun.security.validator. ValidatorException: не удалось построить путь PKIX: sun.security.provider.certpath. SunCertPathBuilderException: невозможно найти действительный путь сертификации для запрошенной цели

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

Если кто-то хочет отключить это исключение в программах Java, то это можно сделать программно, создав собственную фабрику сокетов и, при необходимости, создав varifire имен хостов.

Если кто-то использует класс HttpsURLConnection, это отключит проверку сертификата, как указано ниже.

Итак, код:

Исключение в потоке «основной» java.io. IOException: сервер вернул код ответа HTTP: 401 для URL-адреса: https://www.nkov.com:2083/
на сайте sun.net.www.protocol.http. HttpURLConnection.getInputStream(HttpURLConnection.java:1615)
на сайте sun.net.www.protocol.https. HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)
в МейнПроекте. Cert.main(Cert.java:56)

6 золотых знаков39 серебряных знаков54 бронзовых знака

спросил 28 октября 2012 в 1:43

ответил 28 окт. 2012 в 2:04

14 золотых знаков108 серебряных знаков175 бронзовых знаков

Это не решит проблему. Ошибка 401 была передана через HTTPS и SSL, поэтому сертификаты работают отлично.

В любом случае я настоятельно рекомендую вам этого не делать. Вы не хотите, чтобы при тестировании и производстве выполнялся разный код. Существует серьезный риск того, что тестовый код попадет в рабочую среду и поставит под угрозу безопасность. И нет смысла тестировать небезопасный код.

Читайте также:  Номер фсс череповец

ответил 28 окт. 2012 в 2:29

44 золотых знака307 серебряных знаков483 бронзовых знака

Не беспокойтесь об отключении его в своем коде, вы можете просто добавить сертификат в хранилище доверенных сертификатов вашей тестовой машины и быть на 100% уверенным, что не отправите сборку с отключенной проверкой.

ответил 28 окт. 2012 в 1:57

4 золотых знака23 серебряных знака28 бронзовых знаков

Как упоминалось другими, ошибка 401 означает, что вы действительно установили SSL-соединение, отправили свой запрос и получили обратно эту ошибку 401. Итак, ваш SSL-код в порядке.

ответил 20 ноября 2012 в 10:41

4 золотых знака28 серебряных знаков49 бронзовых знаков

Я получил эту ошибку при попытке запустить приложение:

Sun.security.validator. ValidatorException: проверка пути PKIX не удалась:
java.security.cert. CertPathValidatorException: java.net. UnknownHostException:oscp.thawte.com

Приложение находится в закрытой сети и никогда не сможет получить доступ к oscp.thawte.com. Есть ли настройка Java, которая может отключить это?

спросил 11 янв. 2011 в 22:03

14 золотых знаков107 серебряных знаков142 бронзовых знака

ответил 11 янв. 2011 в 22:14

18 золотых знаков74 серебряных знака111 бронзовых знаков

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

ответил 11 янв. 2011 в 23:39

11 золотых знаков70 серебряных знаков85 бронзовых знаков

В дополнение к ответам выше. Вы можете сделать это программно, реализовав TrustManager:

Однако это не очень хорошая практика для производства.

Этот пример «Как отключить проверку сертификата SSL в Java» содержит служебный класс, который вы можете скопировать в свой проект.

ответил 25 янв. 2019 в 3:28

15 серебряных знаков23 бронзовых знака

Используйте утилиту cli keytool из дистрибутива программного обеспечения Java для импорта (и доверия!) необходимых сертификатов

случайно нашла такой простой совет.
Другие решения требуют использования InstallCert. Java и JDK

ответил 31 янв. 2018 в 13:00

Java отключает проверку SSL

31 золотой знак106 серебряных знаков135 бронзовых знаков

ответил 7 авг. 2018 в 22:57

В веб-сервисе Axis, если вам необходимо отключить проверку сертификатов, используйте приведенный ниже код:

20 золотых знаков113 серебряных знаков121 бронзовый знак

ответил 3 апреля 2014 в 8:19

Это очень просто. На мой взгляд, это лучший способ для всех

ответил 18 апр. 2020 в 17:46

Я хочу получить доступ к URL-адресу веб-службы SOAP, имеющему https, размещенному на удаленной виртуальной машине. Я получаю исключение при доступе к нему с помощью HttpURLConnection.

Вот мой код:

Пробовал разные решения из поиска в Google, ни одно из них не помогло. Я хочу избежать использования keytool, потому что я буду запускать тесты на разных виртуальных машинах.

Читайте также:  Фондом социального страхования является

Есть ли у кого-нибудь решение этой проблемы?

спросил 15 марта 2017 в 10:14

2 золотых знака14 серебряных знаков26 бронзовых знаков

Использование X509ExtendedTrustManager вместо X509TrustManager() решило проблему. Вот пример:

ответил 1 ноября 2017 в 8:30

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

Лучший способ — создать фиктивного траст-менеджера, который доверяет всему.

Затем используйте фиктивный диспетчер доверия для инициализации контекста SSL

SSLContext sc = SSLContext.getInstance(«SSL»);
sc.init(null, dummyTrustManager, новый java.security. SecureRandom());

Наконец, используйте SSLContext для открытия соединения

HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

URL URL = новый URL(«https://myhost:8913/myservice/service?wsdl»);

Более подробно на этот вопрос здесь уже отвечали.
Java: функция переопределения для отключения проверки сертификата SSL

Вышеуказанная проблема связана с тем, что алгоритм подписи сертификата не поддерживается Java. Согласно этому сообщению, в более поздних выпусках Java 8 алгоритм md5 отключен.

jdk.certpath.disabledAlgorithms=MD2, MD5, RSA keySize < 1024,

и удалите MD5

ответил 15 марта 2017 в 10:33

Попробуйте использовать HTTP-клиент Apache, у меня это работает.

ответил 15 марта 2017 в 10:32

1 золотой знак10 серебряных знаков20 бронзовых знаков

Вместо использования HttpsURLConnection.setDefaultSSLSocketFactory и собственной реализации TrustManager или X509ExtendedTrustManager вы можете использовать TrustManagerFactory с хранилищем ключей с сертификатом, выдавшим сертификат, которому вы должны доверять (для самозаверяющего сертификата это то же самое, что и сертификат узла) и вызовите HttpsURLConnection.setSSLSocketFactory в конкретном экземпляре. Это позволяет сократить количество кода и избежать проблем безопасности, связанных с доверием ко всем сертификатам HTTPS.

Метод createSSLSocketFactory выглядит следующим образом:

ответил 19 июля 2019 в 20:55

Другой способ при использовании httpClient из Apache:

И потом:
HttpPost post = new HttpPost(«ваш URI»);

Ответ CloseableHttpResponse = getCloseableHttpClient.execute(post);

ответил 9 авг в 10:41

Настройка шаблона Spring RestTemplate

Если вы неправильно настроили приведенный выше код, вы можете найти сообщение об исключении ниже. Это сообщение подтверждает, что сопоставление сертификатов SSL по-прежнему не удается.

javax.net.ssl. SSLHandshakeException: sun.security.validator. ValidatorException: не удалось построить путь PKIX: sun.security.provider.certpath. SunCertPathBuilderException: невозможно найти действительный путь сертификации для запрошенной цели
на sun.security.ssl. Alerts.getSSLException(Alerts.java:192)
на sun.security.ssl. SSLSocketImpl.fatal(SSLSocketImpl.java:1916)
на sun.security.ssl. Handshaker.fatalSE(Handshaker.java:279)
на sun.security.ssl. Handshaker.fatalSE(Handshaker.java:273)
на sun.security.ssl. ClientHandshaker.serverCertificate(ClientHandshaker.java:1472)
на sun.security.ssl. ClientHandshaker.processMessage(ClientHandshaker.java:213)
на sun.security.ssl. Handshaker.processLoop(Handshaker.java:913)
на sun.security.ssl. Handshaker.process_record(Handshaker.java:849)
на sun.security.ssl. SSLSocketImpl.readRecord(SSLSocketImpl.java:1035)
на sun.security.ssl. SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1344)
на sun.security.ssl. SSLSocketImpl.startHandshake(SSLSocketImpl.java:1371)
на sun.security.ssl. SSLSocketImpl.startHandshake(SSLSocketImpl.java:1355)
по адресу org.apache.http.conn.ssl. SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:394)
по адресу org.apache.http.conn.ssl. SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:353)
по адресу org.apache.http.impl.conn. DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:141)
по адресу org.apache.http.impl.conn. PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:353)
по адресу org.apache.http.impl.execchain. MainClientExec.installRoute(MainClientExec.java:380)
по адресу org.apache.http.impl.execchain. MainClientExec.execute(MainClientExec.java:236)
по адресу org.apache.http.impl.execchain. ПротоколExec.execute(ProtocolExec.java:184)
по адресу org.apache.http.impl.execchain. RetryExec.execute(RetryExec.java:88)
по адресу org.apache.http.impl.execchain. RedirectExec.execute(RedirectExec.java:110)
на org.apache.http.impl.client. InternalHttpClient.doExecute(InternalHttpClient.java:184)
на org.apache.http.impl.client. CloseableHttpClient.execute(CloseableHttpClient.java:82)
на org.apache.http.impl.client. CloseableHttpClient.execute(CloseableHttpClient.java:107)

Читайте также:  Фсс балахна телефон

Задавайте мне свои вопросы в комментариях.

Приятного обучения!!

Java отключить проверку SSL

Прежде чем перейти к решению, давайте посмотрим на ошибку ниже, которую мы получаем при попытке подключения по URL-адресу:

Вызвано: javax.net.ssl. SSLHandshakeException: sun.security.validator. ValidatorException: не удалось построить путь PKIX: sun.security.provider.certpath. SunCertPathBuilderException: невозможно найти действительный путь сертификации для запрошенной цели

Отключить проверку хоста и сертификата

// импорт необходимых пакетов

// Наш основной класс
// Создание доверительного управляющего.

// Проверка не требуется

// Проверка не требуется

// Установка Trast-менеджера
SSLContext SSLCont SSLContext
SSLCont TrustMgr SecureRandom

// Создание вседоверяющего верификатора для имени хоста

// Установка вседоверяющего верификатора для HOST
URL MyURL URL // URL местоположения
URLConnection Connect MyURL // Открытие URL-соединения
Читатель MyReader InputStreamReaderconnect // Создание читателя

Чарс MyReader

Назначение каждой строки мы уже описали в комментариях. Однако если вы внимательно посмотрите на код, то обнаружите, что мы ничего не определили для checkClientTrusted и checkServerTrusted.

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

Обход проверки SSL-сертификата с помощью DefaultHttpClient

Если вы работаете с более старыми версиями HTTP-библиотеки Apache, вам подойдет эта версия кода.

Чтобы использовать экземпляр DefaultHttpClient, используйте его следующим образом.

//Некоторый собственный метод для создания HTTP-объекта сообщения
Сообщение HttpPost = createPostRequest();

//Получаем http-клиент
Клиент DefaultHttpClient = getDefaultHttpClient();

//Выполняем HTTP-метод
HttpResponse httpResponse = client.execute(post);

//Обработка ответа

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

Пример Java для отключения проверки сертификата HTTPS

HttpClient httpClient = HttpClients.custom()
.setSSLContext(новый SSLContextBuilder().loadTrustMaterial(null, TrustAllStrategy. INSTANCE).build())
.setSSLHostnameVerifier(NoopHostnameVerifier. INSTANCE)
.строить();

Затем создайте один SSLContext, используя этот объект TrustManager, и установите фабрику сокетов HttpsURLConnection из созданного объекта SSLContext.

При желании вы также можете отключить проверку хоста, используя класс HostnameVerifier, как указано ниже.

Обход проверки SSL-сертификата с помощью CloseableHttpClient

Если вы работаете с последними версиями HTTP-библиотеки Apache, вам подойдет эта версия кода.

Чтобы использовать экземпляр CloseableHttpClient, используйте его следующим образом.

Оцените статью
ФСС Help
Добавить комментарий