Я пытаюсь получить твиты, используя библиотеку twitter4j для моего проекта Java. При первом запуске я получил ошибку о сертификате sun.security.validator.ValidatorException
и sun.security.provider.certpath.SunCertPathBuilderException
. Затем я добавил твиттер сертификат по:
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
Ответы:
"more info" > "security" > "show certificate" > "details" > "export.."
. Выберите имя и выберите тип файла example.cerТеперь у вас есть файл с хранилищем ключей, и вы должны добавить его в JVM. Определите местоположение файлов cacerts, например.
C:\Program Files (x86)\Java\jre1.6.0_22\lib\security\cacerts.
Затем импортируйте
example.cer
файл в cacerts в командной строке:keytool -import -alias example -keystore C:\Program Files (x86)\Java\jre1.6.0_22\lib\security\cacerts -file example.cer
Вам будет предложено ввести пароль, по умолчанию
changeit
Перезагрузите JVM / ПК.
источник: http://magicmonster.com/kb/prg/java/ssl/pkix_path_building_failed.html
источник
alias
имя сертификата в командной строке должно быть уникальным.После многих часов попыток создать файлы сертификатов, чтобы моя установка Java 6 работала с новыми сертификатами Twitter, я, наконец, наткнулся на невероятно простое решение, скрытое в комментарии на одной из досок объявлений. Просто скопируйте файл cacerts из установки Java 7 и перезапишите файл в вашей установке Java 6. Вероятно, лучше всего сначала сделать резервную копию файла cacerts, но затем просто скопируйте новый файл в BOOM! это просто работает.
Обратите внимание, что я фактически скопировал файл Windows cacerts в установку Linux, и он работал просто отлично.
Файл находится в
jre/lib/security/cacerts
в старой и новой установках Java jdk.Надеюсь, это спасет кого-то еще часы от обострения.
источник
$JAVA_HOME/jre/lib
,$JAVA_HOME/lib
- я потратил немного времени, упуская эту деталь.МОЙ пользовательский интерфейс:
CMD-Line:
keytool -importcert -file jetty.crt -alias jetty -keystore $JAVA_HOME/jre/lib/security/cacerts
changeit
(можно изменить на Mac)источник
keytool -importcert -file dinardap_cert.cer –alias dinardap –keystore “%JAVA_HOME%/jre/lib/security/cacerts”
Я наткнулся на эту проблему, на решение которой ушло много часов исследований, особенно с автоматически сгенерированными сертификатами, которые, в отличие от официальных, довольно хитры, а Java их не очень любит.
Пожалуйста, проверьте следующую ссылку: Решить проблему с сертификатами в Java
По сути, вы должны добавить сертификат с сервера в сертификаты Java Home.
InstallCert
и выполните его во время работы сервера, предоставив следующие аргументыserver[:port]
. Пароль не требуется, так как оригинальный пароль работает для сертификатов Java («changeit»).jssecerts
файл в каталоге, в котором вы запустили Программу (если выполняется из Eclipse, убедитесь, что вы настроили Работу каталог вRun -> Configurations
).$JAVA_HOME/jre/lib/security
После выполнения этих шагов соединения с сертификатом больше не будут генерировать исключения в Java.
Следующий исходный код важен, и он исчез из (Sun) блогов Oracle, единственная найденная мной страница была по указанной ссылке, поэтому я прилагаю его в ответе для любой ссылки.
источник
SandeepanNath:test sandeepan.nath$ java InstallCert repo1.maven.org:443 Loading KeyStore /Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home/jre/lib/security/cacerts... Opening connection to repo1.maven.org:443 ... Starting SSL handshake... javax.net.ssl.SSLException: Received fatal alert: protocol_version .. Could not obtain server certificate chain
1. Проверьте сертификат
Попробуйте загрузить целевой URL-адрес в браузере и просмотреть сертификат сайта (обычно он доступен по значку со знаком блокировки. Он находится слева или справа от адресной строки браузера), независимо от того, истек ли он или нет по другой причине.
2. Установите последние версии JRE и JDK
Новые версии обычно поставляются с обновленным набором доверенных сертификатов.
Также, если это возможно, удалите старые версии. Это сделает ошибки неверной конфигурации явными.
3. Проверьте свою конфигурацию:
4. Скопируйте весь склад ключей из новой версии Java
Если вы разрабатываете с использованием JDK, отличного от последнего доступного - попробуйте заменить
%JAVA_HOME%/jre/lib/security/cacerts
файл новым из последней установленной JRE (сначала сделайте резервную копию), как предлагает @ jeremy-goodell в своем ответе.5. Добавьте сертификат (ы) в ваше хранилище ключей
Если ничто иное не решает вашу проблему, используйте
keytool
для сохранения сертификатов в хранилище ключей Java:Файл с сертификатом можно получить в браузере, как @MagGGG предлагает в своем ответе. .
Примечание 1: вам может потребоваться повторить это для каждого сертификата в цепочке к сертификату вашего сайта. Начните с корневого.
Примечание 2:
<alias_name>
должно быть уникальным среди ключей в магазине илиkeytool
будет отображать ошибку.Чтобы получить список всех сертификатов в магазине, вы можете запустить:
Если что-то пойдет не так, это поможет вам удалить сертификат из магазина:
источник
Используется для проверки сертификата.
Предупреждение Использовать только в целях разработки, это небезопасно!
источник
У меня была немного другая ситуация, когда в моей системе присутствовали JDK и JRE 1.8.0_112.
Я импортировал новые сертификаты CA в
[JDK_FOLDER]\jre\lib\security\cacerts
уже известную команду:Тем не менее, я продолжал получать ту же ошибку при создании пути PKIX .
Я добавил отладочную информацию в Java CLI, используя
java -Djavax.net.debug=all ... > debug.log
. В файле debug.log строка, начинающаяся с trustStore: фактически указывает на хранилище cacerts, найденное в[JRE_FOLDER]\lib\security\cacerts
.В моем случае решением было скопировать файл cacerts, используемый JDK (в который были добавлены новые CA), в файл, используемый JRE, и это решило проблему.
источник
История вопроса:
Я получаю следующую ошибку, когда пытаюсь запустить mvn clean install в моем проекте и с помощью опции очистки и сборки IDE Netbeans. Эта проблема возникает из-за того, что сертификат недоступен при загрузке через IDE NET / через командную строку, но позволяет загружать файлы через браузер.
Ошибка :
Разрешение:
1. Загрузите сертификат указанного URL:
2. Теперь установите хранилище ключей, чтобы исправить проблему.
Примеры команд командной строки / вывод:
источник
Я хотел импортировать сертификат для smtp.gmail.com
Единственное решение, сработавшее для меня, это 1. Введите команду для просмотра этого сертификата.
Скопируйте и сохраните строки между "----- BEGIN CERTIFICATE -----" и "----- END CERTIFICATE -----" в файл gmail.cer
Запустить
Введите пароль
Нажмите Да, чтобы импортировать сертификат
Перезапустите Java
Теперь запустите команду, и вы готовы идти
источник
Это не специфичный для Твиттера ответ, но этот вопрос возникает при поиске этой ошибки. Если ваша система получает эту ошибку при подключении к веб-сайту, который, по- видимому, имеет действительный сертификат при просмотре в веб-браузере , это, вероятно, означает, что веб-сайт имеет неполную цепочку сертификатов .
Для краткого изложения проблемы: Центры сертификации не используют свой корневой сертификат для подписи только старого сертификата. Вместо этого они (обычно) подписывают промежуточное сертификаты, для которых также установлен флаг центра сертификации (то есть разрешено подписывать сертификаты). Затем, когда вы покупаете сертификат в ЦС, они подписывают ваш CSR одним из этих промежуточных сертификатов.
Ваше хранилище доверия Java, скорее всего, имеет только Root Cert, а не промежуточные.
Неправильно настроенный сайт может вернуть только подписанный сертификат. Проблема: она была подписана промежуточным сертификатом, которого нет в вашем хранилище доверенных сертификатов. Браузеры справятся с этой проблемой, загрузив или используя кэшированный промежуточный сертификат; это максимизирует совместимость сайта. Java и такие инструменты, как OpenSSL, однако, не будут. И это приведет к ошибке в вопросе.
Вы можете проверить это подозрение с помощью Qualys SSL Test . Если вы запустите это против сайта, и он говорит
тогда это подтверждает. Вы также можете увидеть это, посмотрев пути сертификации и увидев текст Extra Download .
Как это исправить: администратор сервера должен настроить веб-сервер так, чтобы он также возвращал промежуточные сертификаты. Например, для Comodo этот
.ca-bundle
файл пригодится. Например, в конфигурации Apache с mod_ssl вы должны использовать параметрSSLCertificateChainFile
конфигурации. Для nginx необходимо объединить промежуточные сертификаты и подписанный сертификат и использовать его в конфигурации сертификата SSL. Вы можете найти больше путем поиска "неполной цепочки сертификатов" онлайн.источник
Причина, по которой мы получаем вышеупомянутую ошибку, заключается в том, что JDK связан с большим количеством доверенных сертификатов Центра сертификации (CA) в файл с именем 'cacerts', но этот файл не имеет понятия о нашем самозаверяющем сертификате. Другими словами, файл cacerts не имеет импортированного нашего самозаверяющего сертификата и, таким образом, не обрабатывает его как доверенную сущность и, следовательно, выдает вышеуказанную ошибку.
Как исправить вышеуказанную ошибку
Чтобы исправить вышеуказанную ошибку, все, что нам нужно, это импортировать самоподписанный сертификат в файл cacerts.
Сначала найдите файл cacerts. Нам нужно будет узнать местоположение JDK. Если вы запускаете приложение через одну из сред IDE, например Eclipse или IntelliJ Idea, перейдите в настройки проекта и выясните, где находится JDK. Например, в Mac OS типичное расположение файла cacerts будет в этом месте / Library / Java / JavaVirtualMachines / {{JDK_version}} / Contents / Home / jre / lib / security на компьютере Windows, оно будет находиться в {{Installation_directory} } / {{JDK_version}} / JRE / Библиотека / безопасность
Как только вы нашли файл cacerts, теперь нам нужно импортировать наш самоподписанный сертификат в этот файл cacerts. Проверьте последнюю статью, если вы не знаете, как правильно создать самозаверяющий сертификат.
Если у вас нет файла сертификата (.crt) и у вас просто есть файл .jks, вы можете сгенерировать файл .crt с помощью следующей команды. Если у вас уже есть файл .crt / .pem, вы можете проигнорировать следующую команду
## Для генерации сертификата из хранилища ключей (файл .jks) ####
Выше шаг будет генерировать файл с именем selfsigned.crt.Now Импортировать сертификат в cacerts
Теперь добавьте сертификат в JRE / lib / security / cacerts (trustore)например
Вот и все, перезапустите приложение, и оно должно работать нормально. Если это все еще не работает и получите исключение рукопожатия SSL. Это, вероятно, означает, что вы используете другой домен, зарегистрированный в сертификате.
Ссылка с подробным объяснением и пошаговым разрешением здесь.
источник
Добавление
cacerts
не работает для меня. После включения журнала с флагом-Djavax.net.debug=all
, затем узнал, чтение из Javajssecacerts
.Импорт, чтобы
jssecacerts
работал наконец.источник
jssecacerts
если присутствует, в противном случаеcacerts
.Это решение, но в форме моей истории с этой проблемой:
Я был почти мертв, пытаясь использовать все решения, указанные выше (в течение 3 дней), и у меня ничего не получалось.
Я потерял всякую надежду.
Я связался с моей службой безопасности по этому поводу, потому что я был за прокси, и они сказали, что недавно обновили свою политику безопасности.
Я их отругал за то, что не сообщил разработчикам.
Позже они выпустили новый файл "cacerts", который содержит все сертификаты.
Я удалил файл cacerts, который находится внутри% JAVA_HOME% / jre / lib / security, и это решило мою проблему.
Так что, если вы столкнулись с этой проблемой, это может быть из вашей сетевой команды также, как это.
источник
Я столкнулся с этим вопросом, пытаясь установить плагин Cucumber-Eclipse в Eclipse через их сайт обновлений. Я получил ту же ошибку SunCertPathBuilderException:
Хотя некоторые другие ответы являются подходящими и полезными для данной ситуации в данном вопросе, они, тем не менее, были бесполезны и вводили в заблуждение по моей проблеме.
В моем случае проблема заключалась в том, что URL-адрес для их сайта обновлений:
Однако при переходе к нему через браузер он перенаправляется на (обратите внимание на добавленный « .github »):
Таким образом, решение заключается в том, чтобы просто использовать перенаправленную версию URL сайта обновления при добавлении сайта обновления в eclipse.
источник
Я столкнулся с той же проблемой и решил ее, используя следующие простые шаги:
1) Загрузите InstallCert.java с Google
2) Скомпилируйте его, используя javac InstallCert.java
3) Запустите InstallCert.java, используя java InstallCert.java , с именем хоста и портом https, и нажмите «1» при запросе ввода. Он добавит «localhost» в качестве доверенного хранилища ключей и сгенерирует файл с именем «jssecacerts», как показано ниже:
java InstallCert localhost: 443
4) скопируйте jssecacerts в папку $ JAVA_HOME / jre / lib / security
Основной источник для решения проблемы здесь:
https://ankurjain26.blogspot.in/2017/11/javaxnetsslsslhandshakeexception.html
источник
Я решил эту проблему на Windows Server 2016 с Java 8, импортировав сертификат из
pkcs12
хранилища вcacerts
хранилище ключей.Путь к хранилищу pkcs12:
C:\Apps\pkcs12.pfx
Путь к Java cacerts:
C:\Program Files\Java\jre1.8.0_151\lib\security\cacerts
Путь к keytool:
C:\Program Files\Java\jre1.8.0_151\bin
После выбора папки с keytool в командной строке (от имени администратора) команда для импорта сертификата из
pkcs12
вcacerts
выглядит следующим образом:keytool -v -importkeystore -srckeystore C:\Apps\pkcs12.pfx -srcstoretype PKCS12 -destkeystore "C:\Program Files\Java\jre1.8.0_151\lib\security\cacerts" -deststoretype JKS
Вам будет предложено:
1. ввести целевой пароль хранилища ключей (cacerts pasword, по умолчанию "changeit")
2. введите пароль хранилища ключей источника (пароль pkcs12)
Чтобы изменения вступили в силу, перезапустите сервер (или просто перезапустите JVM).
источник
Здесь обычно такого рода исключения возникают, когда есть несоответствие в PATH доверенного сертификата. Проверьте конфигурацию или путь, где этот сертификат сервера требуется для защищенной связи.
источник
Для меня выскочила ошибка сертификата, потому что у меня был запущен fiddler в фоновом режиме, и это испортилось с сертификатом. Он действует как прокси, так близко, что и перезапустите затмение.
источник
цели:
Как это сделать:
Файл оболочки моего Keystore:
Этот класс создаст хранилище ключей, если необходимо, и сможет управлять сертификатами внутри него. Теперь класс для контекста SSL:
Этот класс выполнен как синглтон, потому что разрешен только один контекст defaultSSL. Итак, теперь использование:
Возможно, он не будет работать с этими настройками, потому что я храню файл сертификата внутри папки ресурсов, поэтому мой путь не является абсолютным. Но в целом все работает отлично.
источник
available()
специально предупреждено в его собственном Javadoc.Это дополнение к ответу https://stackoverflow.com/a/36427118/1491414 . Спасибо @MagGGG
источник
Я исправил это, используя метод ниже
источник
Если у вас есть выше ошибка с Atlassian Software Ex. JIRA
Вы можете добавить сертификаты в доверенное хранилище ключей (замените missing_ca на правильное имя сертификата):
Если запрашивается пароль, введите
changeit
и подтвердитеy
После этого просто перезапустите Jira.
источник
Если URL-адрес вашего хранилища также работает по протоколу HTTP и безопасность не представляет проблемы, вы можете перейти к файлу settings.xml (часто, но не всегда, в нем
%USERPROFILE%/.m2
) и заменить HTTPS на HTTP для<repository>
и<pluginRepository>
URL-адреса.Например, это:
следует заменить на это:
источник
Я использовал свой собственный магазин доверия, а не JRE, передав arg
-Djavax.net.ssl.trustStore=
Я получал эту ошибку независимо от сертификатов в складах доверенных сертификатов. Для меня проблемой было упорядочение свойств, передаваемых по строке arg. Когда я поставил
-Djavax.net.ssl.trustStore=
&-Djavax.net.ssl.trustStorePassword=
before-Dspring.config.location=
&-jar
args, я смог успешно вызвать мой остальной вызов через https.источник
Если вы используете CloudFoundry и столкнулись с проблемой сертификата, вам нужно будет убедиться, что вы снова подтолкнули банку со службой хранилища ключей с сертификатом в нем. Просто unbind, bind и restart не будут работать.
источник
Если ваш хост находится за брандмауэром / прокси , используйте следующую команду в cmd:
Замените
<proxy_hostname>
и<proxy_port>
на настроенный прокси-сервер HTTP. Замените<remote_host_name:remote_ssl_port>
на один из удаленных хостов (в основном, url) и порта, имеющих проблему с сертификацией.Возьмите последний напечатанный контент сертификата и скопируйте его (также скопируйте начало и конец сертификата). Вставьте его в текстовый файл и дайте ему расширение .crt . Теперь импортируйте этот сертификат в cacerts с помощью команды java keytool, и он должен работать.
источник
Попробуйте скопировать Java Cacerts:
cp /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.172-9.b11.fc28.x86_64/jre/lib/security/cacerts $JAVA_HOME/jre/lib/security/cacerts
источник
Если вы видите эту проблему в контейнере Linux, когда приложение Java пытается связаться с другим приложением / сайтом, это происходит из-за того, что сертификат был неправильно импортирован в балансировщик нагрузки. Существует последовательность шагов, которые необходимо выполнить для импорта сертификатов, и если вы все сделаете неправильно, вы увидите такие проблемы, как
Как только сертификаты импортированы правильно, это должно быть сделано. Нет необходимости возиться с какими-либо сертификатами JDK.
источник
Я решил это для Intellij. Идея. Я столкнулся с этой проблемой. Я часто меняю место решения проблемы. Я нашел решение для меня. Щелкните правой кнопкой мыши на своем проекте, вы увидите Maven , после этого нажмите « Создать источники и обновить папки и повторно импортировать».
Сделано.
источник
Я столкнулся с той же проблемой, я использовал 8.1.0-3, но позже я использовал 9.2.1-0, и проблема была решена без каких-либо ручных шагов. Самозаверяющий сертификат работал нормально.
источник