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

Ich lasse einige Tipps zurück.

  1. Verwenden Sie -Dssl.debug=true, um SSL zu überprüfen.
  2. Überprüfen Sie, ob Sie einen Tunnel erstellen oder versuchen, ihn zu ignorieren

    SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, (x509CertChain, authType) -> true).build(); httpClient = HttpClientBuilder.create() .setSSLContext(sslContext) .setConnectionManager(new PoolingHttpClientConnectionManager(RegistryBuilder.create() .register("http", PlainConnectionSocketFactory.INSTANCE) .register("https", new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE)) .build() )).build();

    httpClient.execute(requisicao)

-1voto

Makdous Punkte 1443

Auch wenn ich die Zertifikate in die Datei cacerts kopiert habe, ist der Fehler nicht verschwunden.

Das Problem war, dass das Datum auf dem Zertifikat abgelaufen war, deshalb wurde der Fehler zurückgegeben.

Ich habe neue gültige Zertifikate angefordert und der Fehler ist jetzt behoben.

-1voto

vsingh Punkte 5947

Wenn Sie dieses Problem in einem Linux-Container sehen, wenn die Java-Anwendung versucht, mit einer anderen Anwendung/Website zu kommunizieren, liegt dies daran, dass das Zertifikat falsch in den Lastenausgleicher importiert wurde. Es gibt eine Abfolge von Schritten, die befolgt werden müssen, um Zertifikate zu importieren, und wenn dies nicht korrekt durchgeführt wird, treten Probleme wie

Verursacht durch: sun.security.validator.ValidatorException: PKIX-Pfadbildung fehlgeschlagen: sun.security.provider.certpath.SunCertPathBuilderException: nicht möglich,
gültigen Zertifikatspfad zum angeforderten Ziel zu finden

Sobald die Zertifikate korrekt importiert sind, sollte dies erledigt sein. Es ist nicht notwendig, mit anderen JDK-Zertifikaten herumzuspielen.

-1voto

Sharan Punkte 253

Laden Sie die Zertifikatdatei herunter und aktualisieren Sie den Keystore mit der Zertifikatsdatei wie im folgenden Befehl.

sudo keytool -importcert -alias “aws2” -file ~/Desktop/*aws.crt -keystore /Library/java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/lib/security/cacerts

-1voto

java.nazif Punkte 643

Ich habe es für Intellij Idea gelöst Ich habe dieses Problem trotzdem, obwohl ich an vielen Stellen Änderungen vorgenommen habe. Ich habe eine Lösung für mich gefunden. Klicken Sie mit der rechten Maustaste auf Ihr Projekt, Sie werden Maven sehen, danach drücken Sie Quellen generieren und Ordner aktualisieren und Erneut importieren Geben Sie hier die Bildbeschreibung ein

Es ist erledigt.

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