951 Stimmen

"PKIX Pfadkonstruktion fehlgeschlagen" and "kein gültiger Zertifikat-Pfad zum angeforderten Ziel gefunden"

Ich versuche, Tweets mit der Twitter4j-Bibliothek für mein Java-Projekt abzurufen, die unter Verwendung von java.net.HttpURLConnection (wie im Stack-Trace zu sehen ist) funktioniert. Bei meinem ersten Versuch erhielt ich einen Fehler bezüglich des Zertifikats sun.security.validator.ValidatorException und sun.security.provider.certpath.SunCertPathBuilderException. Dann fügte ich das Twitter-Zertifikat hinzu, indem ich folgendes durchführte:

C:\Program Files\Java\jdk1.7.0_45\jre\lib\security>keytool -importcert -trustcacerts -file PfadZuZertifikat -alias ca_alias -keystore "C:\Program Files\Java\jdk1.7.0_45\jre\lib\security\cacerts"

Aber ohne Erfolg. Hier ist das Verfahren zum Abrufen von Tweets:

public static void main(String[] args) throws TwitterException {
    ConfigurationBuilder cb = new ConfigurationBuilder();
    cb.setDebugEnabled(true)
        .setOAuthConsumerKey("meinConsumerKey")
        .setOAuthConsumerSecret("meinConsumerSecret")
        .setOAuthAccessToken("meinAccessToken")
        .setOAuthAccessTokenSecret("meinAccessTokenSecret");

    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("Gesamtzahl der Tweets: " + result.getTweets().size());
        List tweets = result.getTweets();

        for (Status tweet : tweets) {
            System.out.println("@" + tweet.getUser().getScreenName() + " : " + tweet.getText());
        }
    } catch (TwitterException te) {
        te.printStackTrace();
        System.out.println("Fehler beim Suchen von Tweets: " + te.getMessage());
    }

Und hier ist der Fehler:

sun.security.validator.ValidatorException: PKIX-Pfadaufbau fehlgeschlagen: sun.security.provider.certpath.SunCertPathBuilderException: Kann gültigen Zertifikatspfad zum angeforderten Ziel nicht finden
Relevante Diskussionen finden Sie im Internet unter:
    http://www.google.co.jp/search?q=d35baff5 oder
    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)
Verursacht durch: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX-Pfadaufbau fehlgeschlagen: sun.security.provider.certpath.SunCertPathBuilderException: Kann gültigen Zertifikatspfad zum angeforderten Ziel nicht finden
    at sun.security.ssl.Alerts.getSSLException(Unbekannter Quelltext)
    at sun.security.ssl.SSLSocketImpl.fatal(Unbekannter Quelltext)
    at sun.security.ssl.Handshaker.fatalSE(Unbekannter Quelltext)
    at sun.security.ssl.Handshaker.fatalSE(Unbekannter Quelltext)
    ...

8voto

Aman Goel Punkte 2961

Das Problem ist, dass dein Eclipse nicht in der Lage ist, die Seite zu verbinden, die es eigentlich versucht.

Ich hatte ein ähnliches Problem und die untenstehende Lösung hat bei mir funktioniert.

  1. Schalte jegliche Drittanbieter-Internet-Sicherheitsanwendungen wie z.B. Zscaler aus.
  2. Manchmal musst du auch die VPN-Verbindung trennen, wenn du verbunden bist.

Vielen Dank

5voto

GnanaJeyam Punkte 2491

Wenn Sie immer noch diesen Fehler erhalten

Verursacht durch: sun.security.validator.ValidatorException: PKIX-Pfadelerstellung fehlgeschlagen: sun.security.provider.certpath.SunCertPathBuilderException: nicht in der Lage, gültigen 
Zertifizierungspfad zum angeforderten Ziel zu finden

nach Ausführen des folgenden Befehls und Neustarten des Java-Prozesses oder Neustarten des Systems

keytool -import -alias zertifikatsalias -keystore C:\Program Files\Java\jre1.8.0_151\lib\security\cacerts -file zertifikat.cer

Wenn es ein Problem mit dem JDK gibt, versuchen Sie, das JDK von einem vertrauenswürdigen Anbieter zu installieren. Sobald Sie es von einem vertrauenswürdigen Anbieter neu installiert haben, werden Sie dieses Problem nicht mehr haben.

5voto

alk453 Punkte 125

Hinzufügen von cacerts hat für mich nicht funktioniert. Nach Aktivierung des Protokolls mit dem Flag -Djavax.net.debug=all, habe ich herausgefunden, dass Java aus jssecacerts liest.

Import in jssecacerts hat schließlich funktioniert.

5voto

Dieses Problem tritt hauptsächlich auf, weil die Anfrage von der Anwendung in unserem System blockiert wird, die uns vor Cyberangriffen schützt.

In meinem Fall habe ich versucht, auf einen vertrauenswürdigen API-Dienst zuzugreifen, also habe ich es einfach gelöst, indem ich das Zscaler-Zertifikat zur Datei lib/security/cacerts meines JDK 17 hinzugefügt habe, das in der IDE verwendet wird, indem ich den unten stehenden keytool-Befehl in der Eingabeaufforderung ausgeführt habe.

keytool -keystore  "C:\dev\java\jdk-17.0.7\lib\security\cacerts" -import -alias zscalarCert -file "C:\Users\theri\Documents\zscalar-cert.crt"

Passwort: changeit

4voto

royfripple Punkte 81

Ich bin auf diese Frage gestoßen, während ich versuchte, das Cucumber-Eclipse-Plugin in Eclipse über deren Aktualisierungsseite zu installieren. Ich habe den gleichen SunCertPathBuilderException-Fehler erhalten:

Fehler beim Lesen des Repositorys unter http://cucumber.io/cucumber-eclipse/update-site/content.xml.
    Fehler beim Lesen des Repositorys unter http://cucumber.io/cucumber-eclipse/update-site/content.xml.
    sun.security.validator.ValidatorException: PKIX-Pfadbau fehlgeschlagen: 
   sun.security.provider.certpath.SunCertPathBuilderException: kann gültigen Zertifikatspfad nicht finden

Obwohl einige der anderen Antworten für die gegebene Situation dieser Frage angemessen und hilfreich waren, waren sie dennoch unhilfreich und irreführend für mein Problem.

In meinem Fall lag das Problem darin, dass die URL für ihre Aktualisierungsseite wie folgt lautet:

https://cucumber.io/cucumber-eclipse/update-site

Jedoch wurde bei der Navigation darüber mit einem Browser zu einer Weiterleitung hinzugefügt (".github"):

http://cucumber.github.io/cucumber-eclipse/update-site/

Die Lösung besteht also einfach darin, die Weiterleitungsversion der URL der Aktualisierungsseite zu verwenden, wenn Sie die Aktualisierungsseite in Eclipse hinzufügen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X