Я пытаюсь обратиться к REST API, но я получаю следующее исключение (Complete StackTrace в конце):
Я спросил поставщика API об этой проблеме и сказал, что что-то не так с библиотекой SSL, которую вы используете.
Как бы вы решили эту проблему? С помощью этого же кода (ниже) я делал вызовы в NIMBLE API REST без проблем, но в этом случае он не работает. Тогда у меня нет файла cert (.cer).
Мне нужно отключить проверку SSL, потому что методы безопасности — это API-ключ, который у меня уже есть.
Я также пробовал следующую форму, и исключение одно и то же:
EDITED 2013-06-13 Решение: реализует X509TrustManager
Добавьте следующий код.
. и добавьте следующий класс (реализует X509TrustManager)
Мне нужно отключить проверку SSL, потому что методы безопасности API KEY, который у меня уже есть.
Не ясно, как вы думаете, что ключ API (и его аспект безопасности) имеет какое-либо отношение к безопасности, предоставляемой SSL/TLS: они, конечно же, не затрагивают одни и те же аспекты безопасности. SSL/TLS защищает передачу данных от подслушивания и изменения.
Если вы проверяете сервер, с которым вы пытаетесь связаться с этой службой тестирования SSL, вы обнаружите, что серверу нужен клиент, который поддерживает имя сервера (SNI): это позволяет серверу размещать несколько хостов с разными сертификатами.
Если ваш клиент не поддерживает SNI (Java поддерживает только его на стороне клиента с версии 7), запросы будут представлены другим сертификатом, чем один отступ: он может не выполнить проверку сертификата или имя хоста процедуры проверки. Отключение либо проверки делает соединение уязвимым для атак Man-In-The-Middle.
Я бы сказал, что наиболее вероятной причиной проблемы, которую вы испытываете, является то, что вы используете версию Java, которая не поддерживает SNI (например, Java 6).
Также возможно, что JRE, который вы используете, не имеет этого конкретного ЦС в своем хранилище доверия по умолчанию. Вы можете попытаться получить список сертификатов CA, которым вы хотите доверять, из другого источника (например, пакет Mozilla, как это часто рекомендуется с помощью cURL). Возможно, вам нужно понять, какие сертификаты CA являются первыми.
ВАЖНОЕ ПРИМЕЧАНИЕ: JDK поставляется с ограниченным количеством доверенных корневых сертификаты в файле /lib/security/cacerts. В виде задокументированный в keytool, вы несете ответственность за поддержание (то есть, добавить/удалить) сертификаты, содержащиеся в этом файле, если вы используете этот файл как доверенное хранилище.
В зависимости от конфигурации сертификата серверов, с которыми вы связываетесь, вам может потребоваться добавить дополнительные корневые сертификаты. Получите необходимое от соответствующего поставщика.
В любом случае: деактивация проверки SSL не является решением вашей проблемы.
EDIT:
Похоже, что у службы, которую вы пытаетесь использовать, есть сертификат, выпущенный StartSSL, который не является одним из ЦС, поставляемых по умолчанию с Oracle JRE.
Вам нужно загрузить его из StartSSL (или экспортировать его из надежного пакета, который у вас уже есть, он называется «StartCom. » ) и импортируйте его в свой магазин cacerts с помощью keytool (или другого хранилища доверия, если вы используете другой):
(Конечно, адаптировать путь и имя файла сертификата startssl, если требуется).
Настройка проверки отзыва сертификата с помощью панели управления Java
Для улучшения безопасности функция проверки отзыва сертификата включена по умолчанию, начиная с версии Java 7 Update 25. Перед попыткой Java запустить подписанное приложение будет проверено, не был ли ассоциированный сертификат отозван выпустившим его центром. Эта функция реализована с помощью списков отзыва сертификатов (CRL) и протокола Online Certificate Status Protocol (OCSP).
На панели управления Java расположены различные параметры для настройки проверок отзыва, которые выполняются для запускаемых приложений.
20 просмотра
1 ответ
134 Репутация автора
Как я могу отключить проверку сертификата в Java 8. Я пытаюсь использовать https для подключения к другому серверу, но я получаю эту ошибку:
Я попытался исправить это с помощью -Dcom.sun.net.ssl.checkRevocation=false которого я нашел здесь . Я также попытался добавить свой собственный сертификат в пул, используя Java Keytool. Обе идеи ничего не изменили. Проблема может заключаться в том, что я сгенерировал свой собственный сертификат с помощью openssl. Это не может быть подписано кем-либо, что приводит к ошибке.
Было бы неплохо, если бы я мог просто отключить проверки SSL только для целей тестирования. В производственном сценарии у меня будет подписанный сертификат.
Ответы (1)
0 плюса
280 Репутация автора
Не рекомендуется отключать проверку сертификата, если только это не для целей тестирования. Как вы вызываете сервис в первую очередь?
Если вы используете Apache HttpCleint:
Если вы используете HttpsURLConnection: