Дополнительно
"PKIX path building failed" и "unable to find valid certification path to requested target"
Я пытаюсь получить твиты, используя библиотеку twitter4j для своего java проекта. При первом запуске я получил ошибку о сертификате sun.security.validator.ValidatorException
и sun.security.provider.certpath.SunCertPathBuilderException
. Затем я добавил сертификат twitter:
C:\Program Files\Java\jdk1.7.0_45\jre\lib\security>keytool -importcert -trustcacerts -file PathToCert -alias ca_alias -keystore "C:\Program Files\Java\jdk1.7.0_45\jre\lib\security\cacerts"
Но безуспешно. Вот процедура получения твиттеров:
public static void main(String[] args) throws TwitterException {
ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setDebugEnabled(true)
.setOAuthConsumerKey("myConsumerKey")
.setOAuthConsumerSecret("myConsumerSecret")
.setOAuthAccessToken("myAccessToken")
.setOAuthAccessTokenSecret("myAccessTokenSecret");
TwitterFactory tf = new TwitterFactory(cb.build());
Twitter twitter = tf.getInstance();
try {
Query query = new Query("iphone");
QueryResult result;
result = twitter.search(query);
System.out.println("Total amount of tweets: " + result.getTweets().size());
List<Status> tweets = result.getTweets();
for (Status tweet : tweets) {
System.out.println("@" + tweet.getUser().getScreenName() + " : " + tweet.getText());
}
} catch (TwitterException te) {
te.printStackTrace();
System.out.println("Failed to search tweets: " + te.getMessage());
}
А вот ошибка:
sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Relevant discussions can be found on the Internet at:
http://www.google.co.jp/search?q=d35baff5 or
http://www.google.co.jp/search?q=1446302e
TwitterException{exceptionCode=[d35baff5-1446302e 43208640-747fd158 43208640-747fd158 43208640-747fd158], statusCode=-1, message=null, code=-1, retryAfter=-1, rateLimitStatus=null, version=3.0.5}
at twitter4j.internal.http.HttpClientImpl.request(HttpClientImpl.java:177)
at twitter4j.internal.http.HttpClientWrapper.request(HttpClientWrapper.java:61)
at twitter4j.internal.http.HttpClientWrapper.get(HttpClientWrapper.java:81)
at twitter4j.TwitterImpl.get(TwitterImpl.java:1929)
at twitter4j.TwitterImpl.search(TwitterImpl.java:306)
at jku.cc.servlets.TweetsAnalyzer.main(TweetsAnalyzer.java:38)
Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.ssl.Alerts.getSSLException(Unknown Source)
at sun.security.ssl.SSLSocketImpl.fatal(Unknown Source)
at sun.security.ssl.Handshaker.fatalSE(Unknown Source)
at sun.security.ssl.Handshaker.fatalSE(Unknown Source)
at sun.security.ssl.ClientHandshaker.serverCertificate(Unknown Source)
at sun.security.ssl.ClientHandshaker.processMessage(Unknown Source)
at sun.security.ssl.Handshaker.processLoop(Unknown Source)
at sun.security.ssl.Handshaker.process_record(Unknown Source)
at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at java.net.HttpURLConnection.getResponseCode(Unknown Source)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(Unknown Source)
at twitter4j.internal.http.HttpResponseImpl.<init>(HttpResponseImpl.java:34)
at twitter4j.internal.http.HttpClientImpl.request(HttpClientImpl.java:141)
... 5 more
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.validator.PKIXValidator.doBuild(Unknown Source)
at sun.security.validator.PKIXValidator.engineValidate(Unknown Source)
at sun.security.validator.Validator.validate(Unknown Source)
at sun.security.ssl.X509TrustManagerImpl.validate(Unknown Source)
at sun.security.ssl.X509TrustManagerImpl.checkTrusted(Unknown Source)
at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source)
... 20 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(Unknown Source)
at java.security.cert.CertPathBuilder.build(Unknown Source)
... 26 more
Failed to search tweets: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
346
20
Перейти к URL-адрес в браузере Firefox, нажмите на цепочку сертификата https (рядом с URL-адрес). Нажмите и"Подробнее" и > на "безопасности" и > "и показать сертификат" и > на "детали" и > "на экспорт.."` в. Самовывоз название и выбрать тип файла пример.ЦЭИ. Теперь у вас есть файл ключей, и вы должны добавить это к вашей JVM
Определить местоположение cacerts в файлы, например. Файлы C:\Program (х86)\Ява\jre1.6.0_22\Либ\безопасность\cacerts в. `
Следующий импортировать `пример.файл CER в cacerts в в командной строке:
инструмент -импорт -псевдоним пример-хранилище файлов C:\Program (х86)\Ява\jre1.6.0_22\Либ\\cacerts в файл безопасности пример.КВЖД
Вам будет предложено ввести пароль, который по умолчанию
изменяется
Перезагрузка виртуальной машины Java/ПК.
источник: http://magicmonster.com/kb/prg/java/ssl/pkix_path_building_failed.html
После многих часов попыток создать файлы сертификатов, чтобы заставить мою установку Java 6 работать с новыми сертификатами twitter, я, наконец, наткнулся на невероятно простое решение, спрятанное в комментарии на одной из досок объявлений. Просто скопируйте файл cacerts из установки Java 7 и перезапишите тот, что находится в установке Java 6. Возможно, лучше сначала сделать резервную копию файла cacerts, но затем просто скопировать новый файл и БУМ! он просто работает.
Обратите внимание, что я скопировал файл cacerts из Windows на установку Linux, и он отлично работает.
Файл находится в
jre/lib/security/cacerts
как в старой, так и в новой установке Java jdk.Надеюсь, это сэкономит кому-то еще несколько часов нервотрепки.
Мой подход пользовательского интерфейса:
УМК-линия:
Я наткнулся на эту проблему, на решение которой ушло много часов исследований, особенно с автогенерируемыми сертификатами, которые, в отличие от официальных, довольно хитрые и Java их не очень любит.
Пожалуйста, проверьте следующую ссылку: Решение проблемы с сертификатами в Java
В основном вам нужно добавить сертификат с сервера в Java Home certs.
InstallCert
и выполните его во время работы сервера, указав следующие аргументыserver[:port]
. Пароль не нужен, так как для Java-сертификатов работает оригинальный пароль ("changeit").jssecerts
в директории, где вы выполнили программу (если программа выполняется из Eclipse, убедитесь, что вы настроили рабочую директорию вRun -> Configurations
).$JAVA_HOME/jre/lib/security
.После выполнения этих шагов соединения с сертификатом больше не будут генерировать исключения в Java.
Следующий исходный код важен, и он исчез из блогов (Sun) Oracle, единственная страница, на которой я нашел его, была по указанной ссылке, поэтому я прикрепляю его в ответе для любой ссылки.
Проверить сертификат
Пытаюсь загрузить URL-адрес в браузере и просмотр сайта'сертификат s (обычно это'С можно иконка со знаком замка. Это's на левой или правой стороне браузера's в адресную строку) если это'с истекшим сроком или ненадежных по другой причине.
Установите последние версии JRE и JDK
Новые версии, как правило, приходят с обновленным набором доверенных сертификатов.
Также, если это's возможно, удалить старые версии. Это сделает ошибки неправильной явные.
Проверьте ваши настройки:
Скопировать весь ключей от новой версии Java
Если вы разрабатываете под JDK кроме последнего доступны - попробуйте заменить `%переменной JAVA_HOME%/JRE и/lib/безопасности/cacerts в файл с новым один из последних установленный JRE (сделать резервную копию сначала) как @Джереми-Гуделл говорит в его ответ
Добавить сертификат(ы) на ваш keystore
Если ничего выше решает ключей использовать проблему, чтобы сохранить сертификат(ы) на Java'ы ключей:
Файл с сертификатом можно получить из браузера, как @MagGGG предлагает в своем ответить.
Примечание 1: Возможно, вам придется повторить это для каждого сертификата в цепочке вашего сайта'ы сертификат. Начните от корня одного.
Примечание 2: в
<псевдоним>
должно быть уникальным среди ключей ключей в магазине или будет показывать ошибку.Чтобы получить список всех сертификатов в хранилище вы можете запустить:
В случае если что-то пойдет не так, это поможет вам удалить сертификат из хранилища:
У меня была немного другая ситуация, когда оба JDK и JRE 1.8.0_112 присутствовали на моей системе.
Я импортировал новых сертификатов ca в
[JDK_FOLDER]\среда jre\lib в\безопасность\cacerts в
используя уже известные команды:Все равно, я продолжал получать те же инфраструктура pkix путь здании не удалось ошибка.
Я добавил отладочную информацию на Java командной строки, с помощью Ява -Djavax.чистая.отладки=все ... и GT; отладка.журнал
. В debug.лог-файл, строку, которая начинается с *хранилище:* фактически указал на хранилище cacerts найден в[JRE_FOLDER]\Либ\безопасность\cacerts в
.В моем случае решение было скопировать файл cacerts файл, используемая JDK (который новый КАС добавил) над той, что используется JRE и что исправили проблему.
Предыстория:
Я получаю следующую ошибку, когда я пытаюсь запустить чистый МВН установить в мой проект и через среда NetBeans "очистить и построить" вариант. Эта проблема из-за сертификата не доступны, когда мы скачать через чистых зерен язь/через командную строку, но с возможностью загрузки файлов через браузер.
Ошибка:
Разрешение:
1. Скачать сертификат URL-адрес в вопрос:
2. Теперь установить ключ магазин, чтобы исправить проблему.
Пример командной строки команды/выход:
Он используется для прыжка проверка сертификата.
Я хотел, чтобы импортировать сертификат smtp.gmail.com
Только решение работало для меня
Введите команду, чтобы просмотреть этот сертификат
Скопировать и сохранить грань между " по - -----начните сертификата-----" и "-----конец сертификат-----" и в файл в Gmail.КВЖД
Запустить
Введите пароль chageit
Нажмите кнопку Да, чтобы импортировать сертификат
Перезапуск Явы
теперь выполните команду и вы хорошо идти
Причина, мы вам выше ошибка заключается в том, что JDK является в комплекте с большим количеством доверенного центра сертификации(ca) сертификаты в файл под названием ‘cacerts В’, но этот файл не имеет никакого понятия о наших самоподписанный сертификат. Иными словами, cacerts файл не наш самоподписанный сертификат и, следовательно, не рассматривать его в качестве доверенного лица, и, следовательно, он дает выше сообщение об ошибке.
Как исправить вышеуказанные ошибки
Чтобы исправить вышеперечисленные ошибки, все, что нам нужно-это импортировать самозаверяющий сертификат в файл cacerts.
Во-первых, найдите файл cacerts. Мы должны выяснить расположения пакета JDK. При запуске приложения через один из как в IDE Eclipse или IntelliJ идея перейти к настройкам проекта и выяснить, что положение с JDK. Для Эл.г на Mac типичное расположение операционной системы в cacerts файл будет в этом месте /библиотека/для Java/JavaVirtualMachines/ {{JDK_version}}/содержание/домой/в jre/lib/безопасности на машину окна было бы под {{Installation_directory}}/{{JDK_version}}/среда jre/lib/безопасности
Как только вы обнаружили файл cacerts, теперь нам нужно импортировать самозаверяющий сертификат, чтобы этот файл cacerts. Проверьте последние статьи, если вы не знаете как создать самоподписанный сертификат правильно.
Если вы не имеете файл сертификата(.ЭЛТ) и просто .JKS файл можно создать .файл CRT с помощью ниже команду. В случае, если у вас уже есть .ЭЛТ/.затем файл PEM можно пропустить следующую команду
Для создания сертификата из хранилища ключей(.файл JKS)
Выше шаг будет генерировать файл под названием Как.ЭЛТ.Теперь импортируйте сертификат в cacerts в
Теперь необходимо добавить сертификат в jre/lib/безопасности/cacerts в (trustore)
для Эл.г
Вот и все, перезапустите приложение и он должен работать нормально. Если он все еще не работает и сделать исключение SSL-подтверждения. Это, вероятно, означает, что вы используете другой домен регистрируется в сертификате.
Связь с подробным объяснением и пошаговыми резолюции здесь.
Это'т Твиттер-конкретный ответ, но это вопрос, который встает при поиске этой ошибки. Если ваша система получает эту ошибку при подключении к веб-сайту, что кажется, иметь действительный сертификат при просмотре в веб-браузере, что, вероятно, означает , что сайт имеет неполную цепочку сертификатов.
Краткое резюме проблемы: сертификации Дон'т использовать их корневой сертификат, чтобы подписать только любой старый сертификат. Вместо этого, они (обычно) подписывать сертификаты intermediate, которые имеют сертификации флаг (то есть разрешено подписывать сертификаты). Тогда при покупке сертификата от центра сертификации, они подпишут ваш запрос с одного из этих промежуточных сертификатов.
Ваше доверие-магазине на Java, скорее всего, имеет только корневой сертификат, а не промежуточные.
Неправильно настроенный сайт может вернуть just их самоподписанный сертификат. Проблема: он был подписан промежуточный сертификат, что's не в ваше доверие магазин. Браузеры будут обрабатывать эту проблему путем загрузки или с помощью кэширования промежуточных сертификатом; это позволяет обеспечить максимальную совместимость веб-сайт. Java и инструменты, например, OpenSSL, однако, выиграл'т. И это вызывает ошибку в вопросе.
Вы можете проверить это подозрение с помощью тест оформлен протокол SSL. Если вы запустите это на сайте и написано
то что это подтверждает. Вы также можете увидеть, посмотрев по пути сертификации и видя текста Extra Download.
Как исправить: администратор сервера должен настроить веб-сервер, а также вернуть промежуточных сертификатов. Для Comodo, например, отсюда.файл ca-пакет приходит в сподручное. Например, в конфигурации Apache с mod_ssl, вы'd с помощью
SSLCertificateChainFile
параметр конфигурации. Для nginx, нужно объединить промежуточных сертификатов и сертификатов и использовать в конфигурации SSL сертификата. Вы можете узнать больше, поиск на "неполная цепочка сертификатов" в онлайн.Добавление
cacerts в
не работает для меня. После включения войти с флагом-Djavax.чистая.отладки=все, потом пришел знаете Java чтение из
jssecacerts`.Импорт в
jssecacerts
работал наконец.Я наткнулся на этот вопрос при попытке установить свежий огурец-затмение плагин в Eclipse через их сайт обновление. Я получил ту же ошибку SunCertPathBuilderException:
В то время как некоторые другие ответы будут уместны и полезны на этот вопрос's в данной ситуации, они были тем не менее бесполезен и вводит в заблуждение мой вопрос.
В моем случае, проблема была в том, что URL-адрес, указанный на их сайте обновление:
Однако при переходе к нему через браузер, он перенаправляется на (примечание добавил, что ".на GitHubи"):
Поэтому резолюция, чтобы просто использовать перенаправленные версия обновления URL сайта, при добавлении сайта обновление в Eclipse.
Передо мной стоял тот же вопрос, и он решен с помощью приведенных ниже простых шагов:
Скачать InstallCert.java из Google
скомпилировать его с помощью и javac InstallCert.java
запустить InstallCert.java используя Ява InstallCert.java, с hostname и порт HTTPS, и нажимаем “1”, когда задаете вопрос. Он будет добавить “localhost” в качестве надежного хранилища, и создает файл с именем “jssecacerts“, как показано ниже:
Ява InstallCert адресу localhost:443
Основным источником для решения этой проблемы является:
https://ankurjain26.blogspot.in/2017/11/javaxnetsslsslhandshakeexception.html
Это решение, но в виде моей истории с этой проблемой:
Я был почти мертв, пытаясь все приведенное выше решение(за 3 дня ) и ничего не работало для меня.
Я потерял всякую надежду.
Я связался с моей командой безопасности в связи с этим, потому что я за прокси, и они сказали, что они недавно обновили свои политики безопасности.
Я сильно отругала их за не информирование разработчиков.
Позже они выпустили новый "в cacerts в том, что" файл, содержащий все сертификаты.
Я снял cacerts файл, который присутствует в %переменной JAVA_HOME%/JRE и/lib/безопасности и решить мою проблему.
Так что если вы столкнулись с этой проблемой, это может быть от сети команда также, как это.
Обычно такое исключение возникает при несоответствии в PATH доверенного сертификата. Проверьте конфигурацию или путь, где этот сертификат сервера требуется для безопасной связи.
Для меня, ошибка сертификата выскочил, потому что я скрипач работает в фоновом режиме и что съедут с сертификатом. Он работает как прокси-так близко, что и перезапустите Eclipse.
Это'дополнение к ответу https://stackoverflow.com/a/36427118/1491414. Спасибо @MagGGG
Я исправил это с помощью ниже метод-
Когда у вас есть ошибки с программным обеспечением компании Atlassian экс. Джира
вы можете добавить сертификаты для это'ы надежного хранилища (изменить missing_ca к правильному наименование сертификата):
Если просит пароль ставим
изменяется
и подтвердитьг
После этого просто перезагрузите Джира.