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)
    ...

1voto

Tohid Makari Punkte 1212

1- Importieren Sie zuerst Ihre crt-Datei in {JAVA_HOME}/jre/security/cacerts. Wenn Sie weiterhin auf diese Ausnahme stoßen, ändern Sie Ihre jdk-Version. Zum Beispiel von jdk1.8.0_17 zu jdk1.8.0_231

1voto

Akshay Chopra Punkte 659

Ich hatte dieses Problem in meinem Flutter-Projekt.

Das Problem war auf die Einschränkung durch die Sicherheitssoftware zurückzuführen, die auf dem Laptop meiner Firma installiert war.

Die Lösung wurde vom IT-Team gegeben, das eine Verbindung zum VPN herstellte, das von der Firma bereitgestellt wurde. Dann konnte ich die erforderlichen Dateien herunterladen und das Projekt lief erfolgreich.

Hinweis: Ich musste mich nur einmal mit dem VPN der Firma verbinden. Nachdem das Projekt erfolgreich gestartet war, musste ich mich nicht mehr mit dem VPN verbinden.

0voto

Hakan54 Punkte 2111

Auch wenn bereits viele Antworten gegeben wurden, möchte ich eine einfache Alternative vorschlagen, die auf Certificate Ripper basiert, den ich selbst entwickelt habe. Es extrahiert das Serverzertifikat und fügt es dem Cacert-Truststore des JDK hinzu. Siehe unten für den Befehl.

crip export jks -u=https://[HOST:[PORT] -d=$JAVA_HOME/jre/lib/security/cacerts

In einigen Fällen müssen Sie es mit sudo oder Administratorrechten ausführen. Es ist für Windows, Mac und Linux verfügbar. Binärdateien finden Sie hier: Zertifikatsripper-Binärdateien

0voto

Ramakrishna Joshi Punkte 1006

In meinem Fall war eine Proxy-Software auf meinem Mac der Übeltäter.

Ich hatte dieses Problem, als ich versuchte, ein Projekt auf meinem Macbook zu erstellen. Ich habe so viele Lösungen ausprobiert, aber keine hat funktioniert. Schließlich sah ich, dass das IT-Team eine Proxy-Software installiert hatte und vermutete, dass die Proxy-Software möglicherweise Gradle blockiert, um die Abhängigkeiten herunterzuladen. Ich habe mich mit dem IT-Team in Verbindung gesetzt, die Proxy-Software deinstallieren lassen und dann das Projekt synchronisiert. Und endlich hat es funktioniert.

0voto

Akhilesh Joshi Punkte 240

Arbeitsschritte über das Linux-Terminal (Schritte unten)

  1. Laden Sie die Zertifikate für die URL herunter, die sich beschwert (für mich war es repo.maven.apache.org)

    openssl s_client -showcerts -connect repo.maven.apache.org:443 /tmp/maven_repo.pem

  2. Extrahieren Sie die Zertifikatsinformationen in die vorhandene Keystore-Datei (nennen wir sie abc.jks)

    sudo $JAVA_HOME/bin/keytool -trustcacerts -keystore /home/akhilesh/abc.jks -storepass changeit -importcert -alias mavenrepo -file /tmp/maven_repo.pem

  3. Wenn Sie keine vorhandene Keystore-Datei haben, können Sie sie zu ${JAVA_HOME}/lib/security/cacerts hinzufügen

    sudo ${JAVA_HOME}/bin/keytool -importcert -alias "MavenCert" -keystore /${JAVA_HOME}/lib/security/cacerts -file /tmp/maven_repo.pem

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