wake-up-neo.com

"PKIX-Pfadaufbau fehlgeschlagen" und "Gültiger Zertifizierungspfad zum angeforderten Ziel konnte nicht gefunden werden"

Ich versuche, Tweets mit Twitter4j library für mein Java-Projekt zu erhalten. Beim ersten Durchlauf erhielt ich eine Fehlermeldung über das Zertifikat Sun.security.validator.ValidatorException und Sun.security.provider.certpath.SunCertPathBuilderException. Dann habe ich ein Twitter-Zertifikat hinzugefügt von:

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"

Aber ohne Erfolg. So erhalten Sie Twitters:

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());
    }

Und hier ist der Fehler:

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
264
Dozent
  1. Gehen Sie zu URL in Ihrem Firefox-Browser und klicken Sie auf HTTPS-Zertifikatskette (neben URL-Adresse). Klicken Sie auf "more info" > "security" > "show certificate" > "details" > "export..". Nimm den Namen und wähle den Dateityp example.cer. Jetzt haben Sie eine Datei mit Keystore und müssen diese zu Ihrer JVM hinzufügen

  2. Bestimmen Sie den Speicherort von Cacerts-Dateien, z. C:\Program Files (x86)\Java\jre1.6.0_22\lib\security\cacerts.

  3. Importieren Sie als nächstes die Datei example.cer In cacerts in der Befehlszeile:

keytool -import -alias example -keystore C:\Program Files (x86)\Java\jre1.6.0_22\lib\security\cacerts -file example.cer

Sie werden nach dem Kennwort gefragt, das standardmäßig changeit lautet.

Starten Sie Ihre JVM/Ihren PC neu.

quelle: http://magicmonster.com/kb/prg/Java/ssl/pkix_path_building_failed.html

433
MagGGG

Nachdem ich viele Stunden versucht hatte, cert-Dateien zu erstellen, damit meine Java 6-Installation mit den neuen Twitter-Zertifikaten funktioniert, stolperte ich schließlich über eine unglaublich einfache Lösung, die in einem Kommentar in einem der Message Boards begraben war. Kopieren Sie einfach die cacerts-Datei aus einer Java 7-Installation und überschreiben Sie sie in Ihrer Java 6-Installation. Vermutlich ist es am besten, zuerst eine Sicherungskopie der Cacerts-Datei zu erstellen, aber dann kopieren Sie einfach die neue in und BOOM! es funktioniert einfach.

Beachten Sie, dass ich tatsächlich eine Windows-Cacerts-Datei auf eine Linux-Installation kopiert habe.

Die Datei befindet sich in jre/lib/security/cacerts sowohl in der alten als auch in der neuen Java jdk-Installation.

Ich hoffe, das erspart jemandem andere Stunden der Verschärfung.

68
Jeremy Goodell

Ich bin über dieses Problem gestolpert, das viele Stunden der Recherche in Anspruch nahm, insbesondere mit automatisch generierten Zertifikaten, die im Gegensatz zu offiziellen recht kompliziert sind und von Java nicht so gern gesehen werden.

Bitte überprüfen Sie den folgenden Link: Problem mit Zertifikaten in Java lösen

Grundsätzlich müssen Sie das Zertifikat vom Server zu den Java Home-Zertifikaten hinzufügen. 

  1. Generieren oder Holen Sie Ihr Zertifikat und konfigurieren Sie Tomcat für die Verwendung in Servers.xml
  2. Laden Sie den Java-Quellcode der Klasse InstallCert herunter und führen Sie ihn aus, während der Server ausgeführt wird, und geben Sie die folgenden Argumente an server[:port]. Es ist kein Passwort erforderlich, da das ursprüngliche Passwort für die Java-Zertifikate funktioniert ("changeit").
  3. Das Programm stellt eine Verbindung zum Server her, und Java löst eine Ausnahme aus. Es analysiert das vom Server bereitgestellte Zertifikat und ermöglicht Ihnen die Erstellung einer jssecerts-Datei in dem Verzeichnis, in dem Sie das Programm ausgeführt haben. Wenn Sie es von Eclipse aus ausführen, müssen Sie die Konfiguration vornehmen Arbeitsverzeichnis in Run -> Configurations).
  4. Kopieren Sie diese Datei manuell nach $Java_HOME/jre/lib/security.

Nachdem Sie diese Schritte ausgeführt haben, werden die Verbindungen mit dem Zertifikat keine Ausnahmen mehr in Java generieren.

Der folgende Quellcode ist wichtig und er ist aus (Sun) Oracle-Blogs verschwunden. Die einzige Seite, die ich gefunden habe, war der Link. Daher füge ich ihn in der Antwort als Referenz bei.

/*
 * Copyright 2006 Sun Microsystems, Inc.  All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 *   - Redistributions of source code must retain the above copyright
 *     notice, this list of conditions and the following disclaimer.
 *
 *   - Redistributions in binary form must reproduce the above copyright
 *     notice, this list of conditions and the following disclaimer in the
 *     documentation and/or other materials provided with the distribution.
 *
 *   - Neither the name of Sun Microsystems nor the names of its
 *     contributors may be used to endorse or promote products derived
 *     from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
/**
 * Originally from:
 * http://blogs.Sun.com/andreas/resource/InstallCert.Java
 * Use:
 * Java InstallCert hostname
 * Example:
 *% Java InstallCert ecc.Fedora.redhat.com
 */

import javax.net.ssl.*;
import Java.io.*;
import Java.security.KeyStore;
import Java.security.MessageDigest;
import Java.security.cert.CertificateException;
import Java.security.cert.X509Certificate;

/**
 * Class used to add the server's certificate to the KeyStore
 * with your trusted certificates.
 */
public class InstallCert {

    public static void main(String[] args) throws Exception {
        String Host;
        int port;
        char[] passphrase;
        if ((args.length == 1) || (args.length == 2)) {
            String[] c = args[0].split(":");
            Host = c[0];
            port = (c.length == 1) ? 443 : Integer.parseInt(c[1]);
            String p = (args.length == 1) ? "changeit" : args[1];
            passphrase = p.toCharArray();
        } else {
            System.out.println("Usage: Java InstallCert [:port] [passphrase]");
            return;
        }

        File file = new File("jssecacerts");
        if (file.isFile() == false) {
            char SEP = File.separatorChar;
            File dir = new File(System.getProperty("Java.home") + SEP
                    + "lib" + SEP + "security");
            file = new File(dir, "jssecacerts");
            if (file.isFile() == false) {
                file = new File(dir, "cacerts");
            }
        }
        System.out.println("Loading KeyStore " + file + "...");
        InputStream in = new FileInputStream(file);
        KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
        ks.load(in, passphrase);
        in.close();

        SSLContext context = SSLContext.getInstance("TLS");
        TrustManagerFactory tmf =
                TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
        tmf.init(ks);
        X509TrustManager defaultTrustManager = (X509TrustManager) tmf.getTrustManagers()[0];
        SavingTrustManager tm = new SavingTrustManager(defaultTrustManager);
        context.init(null, new TrustManager[]{tm}, null);
        SSLSocketFactory factory = context.getSocketFactory();

        System.out.println("Opening connection to " + Host + ":" + port + "...");
        SSLSocket socket = (SSLSocket) factory.createSocket(Host, port);
        socket.setSoTimeout(10000);
        try {
            System.out.println("Starting SSL handshake...");
            socket.startHandshake();
            socket.close();
            System.out.println();
            System.out.println("No errors, certificate is already trusted");
        } catch (SSLException e) {
            System.out.println();
            e.printStackTrace(System.out);
        }

        X509Certificate[] chain = tm.chain;
        if (chain == null) {
            System.out.println("Could not obtain server certificate chain");
            return;
        }

        BufferedReader reader =
                new BufferedReader(new InputStreamReader(System.in));

        System.out.println();
        System.out.println("Server sent " + chain.length + " certificate(s):");
        System.out.println();
        MessageDigest sha1 = MessageDigest.getInstance("SHA1");
        MessageDigest md5 = MessageDigest.getInstance("MD5");
        for (int i = 0; i < chain.length; i++) {
            X509Certificate cert = chain[i];
            System.out.println
                    (" " + (i + 1) + " Subject " + cert.getSubjectDN());
            System.out.println("   Issuer  " + cert.getIssuerDN());
            sha1.update(cert.getEncoded());
            System.out.println("   sha1    " + toHexString(sha1.digest()));
            md5.update(cert.getEncoded());
            System.out.println("   md5     " + toHexString(md5.digest()));
            System.out.println();
        }

        System.out.println("Enter certificate to add to trusted keystore or 'q' to quit: [1]");
        String line = reader.readLine().trim();
        int k;
        try {
            k = (line.length() == 0) ? 0 : Integer.parseInt(line) - 1;
        } catch (NumberFormatException e) {
            System.out.println("KeyStore not changed");
            return;
        }

        X509Certificate cert = chain[k];
        String alias = Host + "-" + (k + 1);
        ks.setCertificateEntry(alias, cert);

        OutputStream out = new FileOutputStream("jssecacerts");
        ks.store(out, passphrase);
        out.close();

        System.out.println();
        System.out.println(cert);
        System.out.println();
        System.out.println
                ("Added certificate to keystore 'jssecacerts' using alias '"
                        + alias + "'");
    }

    private static final char[] HEXDIGITS = "0123456789abcdef".toCharArray();

    private static String toHexString(byte[] bytes) {
        StringBuilder sb = new StringBuilder(bytes.length * 3);
        for (int b : bytes) {
            b &= 0xff;
            sb.append(HEXDIGITS[b >> 4]);
            sb.append(HEXDIGITS[b & 15]);
            sb.append(' ');
        }
        return sb.toString();
    }

    private static class SavingTrustManager implements X509TrustManager {

        private final X509TrustManager tm;
        private X509Certificate[] chain;

        SavingTrustManager(X509TrustManager tm) {
            this.tm = tm;
        }

        public X509Certificate[] getAcceptedIssuers() {
            throw new UnsupportedOperationException();
        }

        public void checkClientTrusted(X509Certificate[] chain, String authType)
                throws CertificateException {
            throw new UnsupportedOperationException();
        }

        public void checkServerTrusted(X509Certificate[] chain, String authType)
                throws CertificateException {
            this.chain = chain;
            tm.checkServerTrusted(chain, authType);
        }
    }
}
23
will824

MEIN UI-Ansatz:

  1. Download http://www.keystore-Explorer.org/
  2. Öffnen Sie $ Java_HOME/jre/lib/security/cacerts
  3. pW eingeben: changeit (Kann auf Mac geändert werden)
  4. Importieren Sie Ihre .crt-Datei

CMD-Line:

  1. keytool -importcert -file jetty.crt -alias jetty -keystore $ Java_HOME/jre/lib/security/cacerts
  2. pW eingeben: changeit (Kann auf Mac geändert werden)
21
Mike Mitterer

Ich hatte eine etwas andere Situation, als sowohl JDK als auch JRE 1.8.0_112 auf meinem System vorhanden waren. 

Ich habe die neuen CA-Zertifikate mit dem bereits bekannten Befehl in [JDK_FOLDER]\jre\lib\security\cacerts importiert:

keytool -import -trustcacerts -keystore cacerts -alias <new_ca_alias> -file <path_to_ca_cert_file>

Trotzdem bekam ich immer den gleichen PKIX-Pfadaufbau fehlgeschlagen Fehler. 

Ich habe der Java-CLI Debug-Informationen hinzugefügt, indem ich Java -Djavax.net.debug=all ... > debug.log verwendete. In der Datei debug.log beginnt die Zeile, die mit trustStore beginnt: tatsächlich auf den in [JRE_FOLDER]\lib\security\cacerts gefundenen Cacerts-Speicher. 

In meinem Fall bestand die Lösung darin, die von JDK verwendete cacerts-Datei (die die neuen CAs hinzugefügt hatten) über die von der JRE verwendete zu kopieren und das Problem zu beheben. 

11
M. F.

1. Überprüfen Sie das Zertifikat

Versuchen Sie, die Ziel-URL in den Browser zu laden und das Zertifikat der Website anzuzeigen (normalerweise ist es über das Symbol mit dem Sperrzeichen erreichbar. Sie befindet sich links oder rechts in der Adressleiste des Browsers), unabhängig davon, ob das Zertifikat abgelaufen ist oder aus anderen Gründen nicht vertrauenswürdig ist.

2. Installieren Sie die neuesten Versionen von JRE und JDK

Neue Versionen werden normalerweise mit dem aktualisierten Satz vertrauenswürdiger Zertifikate geliefert.

Wenn es möglich ist, deinstallieren Sie alte Versionen. Dadurch werden Fehlkonfigurationsfehler explizit gemacht.

3. Überprüfen Sie Ihre Konfiguration:

  • Prüfen Sie, wohin Ihre Java_HOME-Umgebungsvariable zeigt.
  • Prüfen Sie, mit welcher Java-Version Sie das Programm ausführen. In IntelliJ prüfen Sie:
    • Datei -> Projektstruktur ... -> Projekteinstellungen -> Projekt -> Projekt-SDK:
    • Datei -> Projektstruktur ... -> Plattformeinstellungen -> SDKs

4. Kopieren Sie den gesamten Keystore aus der neuen Java-Version

Wenn Sie unter dem JDK eine andere als die aktuellste Version entwickeln, versuchen Sie, die %Java_HOME%/jre/lib/security/cacerts-Datei durch die neue aus der zuletzt installierten JRE zu ersetzen (erstellen Sie zuerst eine Sicherungskopie), wie @ jeremy-goodell in seiner answer schlägt.

5. Fügen Sie Ihrem Keystore Zertifikate hinzu

Wenn das Problem durch nichts gelöst wird, verwenden Sie keytool, um Zertifikate im Java-Keystore zu speichern:

keytool -trustcacerts -keystore "%Java_HOME%jre\lib\security\cacerts" -storepass changeit -importcert -alias <alias_name> -file <path_to_crt_file>

Die Datei mit dem Zertifikat kann vom Browser abgerufen werden, wie @MagGGG in seiner Antwort vorschlägt.

Hinweis 1: Möglicherweise müssen Sie dies für jedes Zertifikat in der Kette mit dem Zertifikat Ihres Standorts wiederholen. Beginnen Sie von der Wurzel aus.

Hinweis 2: <alias_name> sollte unter den Schlüsseln im Speicher eindeutig sein, oder keytool zeigt einen Fehler an.

Um eine Liste aller Zertifikate im Geschäft abzurufen, können Sie Folgendes ausführen:

keytool -list -trustcacerts -keystore "%Java_HOME%jre\lib\security\cacerts" -storepass changeit

Wenn etwas schief geht, können Sie das Zertifikat aus dem Laden entfernen:

keytool -delete -alias <alias_name> -keystore "%Java_HOME%jre\lib\security\cacerts" -storepass changeit
10
Lu55

Ich wollte ein Zertifikat für smtp.gmail.com importieren

Die einzige Lösung, die für mich funktioniert hat, ist 1. Geben Sie den Befehl ein, um dieses Zertifikat anzuzeigen

D:\openssl\bin\openssl.exe s_client -connect smtp.gmail.com:465

  1. Kopieren Sie die Zeilen zwischen "----- BEGIN CERTIFICATE -----" und "----- END CERTIFICATE -----" in eine Datei, gmail.cer

  2. Lauf

    keytool -import -alias smtp.gmail.com -keystore "% Java_HOME%/jre/lib/security/cacerts" -Datei C:\Benutzer\Admin\Desktop\gmail.cer

  3. Geben Sie das Passwort ein Chageit

  4. Klicken Sie auf Ja, um das Zertifikat zu importieren 

  5. Starten Sie Java neu

führen Sie jetzt den Befehl aus und Sie können loslegen

6
Sneha Shejwal

Problemhintergrund: 

Ich habe folgende Fehlermeldung erhalten, als ich versuche, mvn clean install in meinem Projekt auszuführen und die Option zum Reinigen und Erstellen von Netbeans IDE zu verwenden .. Dieses Problem ist darauf zurückzuführen, dass das Zertifikat nicht verfügbar ist, wenn wir über den Befehl NET Beans IDE/through herunterladen Eingabeaufforderung, aber die Dateien können über den Browser heruntergeladen werden. 

Error:

Caused by: org.Eclipse.aether.transfer.ArtifactTransferException: Could not transfer artifact com.Java.project:product:jar:1.0.32 from/to repo-local (https://url/local-repo): Sun.security.validator.ValidatorException: PKIX path building failed: Sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target  

Auflösung:

1. Laden Sie das Zertifikat der betreffenden URL herunter:

  • Starten Sie IE mit "als Administrator ausführen" (andernfalls können wir das Zertifikat nicht herunterladen)
  • Geben Sie die URL in IE-> https: // url/local-repo .__ ein. (In meinem Fall hatte diese URL ein nicht vertrauenswürdiges Zertifikat  enter image description here .)
  • Laden Sie das Zertifikat herunter, indem Sie auf Zertifikatfehler -> Zertifikat anzeigen klicken
  • Wählen Sie die Registerkarte Details -> In Datei kopieren -> Weiter -> Wählen Sie "DER-codierte Binärdatei X.509 (.CER) aus. 
  • speichern Sie das Zertifikat an einem bestimmten Ort. Beispiel: c: /user/sheldon/desktop/product.cer 
  • Glückwunsch! Sie haben das Zertifikat für die Site erfolgreich heruntergeladen

2. Installieren Sie jetzt den Schlüsselspeicher, um das Problem zu beheben.

  • Führen Sie den Befehl keytool aus, um den heruntergeladenen Schlüsselspeicher an die .__ anzuhängen. vorhandene Zertifikatsdatei.
  • Command: Unter dem Befehl im Ordner bin von jdk (Java_HOME)

C:\Programme\Java\jdk1.8.0_141\jre\bin> keytool -importcert -file "C: /user/sheldon/desktop/product.cer" -Alias-Produkt -keystore "C:/Programme/Java/jdk1.8.0_141/jre/lib/security/cacerts".

  • Sie werden aufgefordert, das Passwort einzugeben. Geben Sie das Keystore-Kennwort ein: Geben Sie erneut "changeeit" für "Trust this certificate? [No]:" ein, geben Sie "Yes" ein.

Beispiel Befehlszeilenbefehle/Ausgabe:

keytool -importcert -file "C:/Users/sheldon/Desktop/product.cer" -alias product -keystore "C:/Program iles/Java/jdk1.8.0_141/jre/lib/security/cacerts"
Enter keystore password:
Trust this certificate? [no]:  yes
Certificate was added to keystore
  • Contgrats! Sie sollten jetzt den Fehler "PKIX-Pfaderstellung fehlgeschlagen: Sun.security.provider.certpath.SunCertPathBuilderException" in Ihrer Netbeans-IDE beseitigen. 
4
Barani r

Dies ist keine auf Twitter bezogene Antwort, aber diese Frage wird angezeigt, wenn Sie nach diesem Fehler suchen. Wenn Ihr System diesen Fehler erhält, wenn Sie eine Verbindung zu einer Website herstellen, die scheint in einem Webbrowser ein gültiges Zertifikat zu haben, bedeutet dies wahrscheinlich diese Website hat eine unvollständige Zertifikatskette

Für eine kurze Zusammenfassung des Problems: Zertifizierungsstellen verwenden ihr Stammzertifikat nicht zum Signieren nur eines alten Zertifikats. Stattdessen signieren sie (normalerweise) intermediäre Zertifikate, für die auch das Certificate Authority-Flag gesetzt ist (dh Zertifikate signieren dürfen). Wenn Sie dann ein Zertifikat von einer Zertifizierungsstelle erwerben, signieren Sie Ihre CSR mit einem dieser Zwischenzertifikate.

Ihr Java-Vertrauensspeicher verfügt höchstwahrscheinlich nur über das Root-Zertifikat, nicht über das mittlere Zertifikat. 

Eine falsch konfigurierte Site kann nur ihr signiertes Zertifikat zurückgeben. Problem: Es wurde mit einem Zwischenzertifikat signiert, das sich nicht in Ihrem Trust Store befindet. Browser behandeln dieses Problem, indem sie ein zwischengespeichertes Zwischenzertifikat herunterladen oder verwenden. Dadurch wird die Website-Kompatibilität maximiert. Java und Tools wie OpenSSL jedoch nicht. Und das wird den Fehler in der Frage verursachen.

Sie können diesen Verdacht mithilfe des Qualys SSL-Tests überprüfen. Wenn Sie das gegen eine Site laufen lassen, heißt es

Die Zertifikatskette dieses Servers ist unvollständig.

das bestätigt es dann. Sie können dies auch sehen, indem Sie die Zertifizierungspfade und den Text Extra Download anzeigen.

So beheben Sie das Problem: Der Serveradministrator muss den Webserver so konfigurieren, dass er auch die Zwischenzertifikate zurückgibt. Für Comodo ist hier beispielsweise die .ca-bundle-Datei hilfreich. In einer Apache-Konfiguration mit mod_ssl würden Sie beispielsweise die Konfigurationseinstellung SSLCertificateChainFile verwenden. Für nginx müssen Sie die Zwischenzertifikate und das signierte Zertifikat verketten und in der SSL-Zertifikatskonfiguration verwenden. Mehr finden Sie, wenn Sie online nach "unvollständiger Zertifikatskette" suchen.

3
Reid
-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true

Es wird für das Springen der Zertifikatsüberprüfung verwendet.

2
gorums

Der Grund für den obigen Fehler ist, dass das JDK mit vielen vertrauenswürdigen Zertifizierungsstellen (Certificate Authority, CA) in einer Datei namens "cacerts" gebündelt ist. Diese Datei enthält jedoch keine Hinweise auf unser selbstsigniertes Zertifikat. Mit anderen Worten, die cacerts-Datei hat kein selbstsigniertes Zertifikat importiert und behandelt sie daher nicht als vertrauenswürdige Entität. Daher wird der obige Fehler angezeigt.

So beheben Sie den obigen Fehler

Um den obigen Fehler zu beheben, müssen Sie nur das selbstsignierte Zertifikat in die cacerts-Datei importieren.

Suchen Sie zuerst die Cacerts-Datei. Wir müssen den JDK-Standort herausfinden. Wenn Sie Ihre Anwendung über eine IDE wie Eclipse oder IntelliJ Idea ausführen, gehen Sie zu den Projekteinstellungen und finden Sie heraus, wie sich der JDK-Speicherort befindet. __ Für ein Mac OS wäre ein typischer Speicherort von cacerts-Dateien an diesem Speicherort/dieser Bibliothek/Java/JavaVirtualMachines/{{JDK_version}}/Contents/Home/jre/lib/security Auf einem Windows-Computer wäre dies unter {{Installationsverzeichnis}}/{{JDK_version}}/jre/lib/security

Nachdem Sie die cacerts-Datei gefunden haben, müssen Sie jetzt unser selbstsigniertes Zertifikat in diese cacerts-Datei importieren. Lesen Sie im letzten Artikel nach, wenn Sie nicht wissen, wie Sie das selbstsignierte Zertifikat richtig generieren.

Wenn Sie keine Zertifikatsdatei (.crt) und nur eine .jks-Datei haben, können Sie eine .crt-Datei mit dem folgenden Befehl generieren. Falls Sie bereits eine .crt/.pem-Datei haben, können Sie den folgenden Befehl ignorieren

## So generieren Sie ein Zertifikat aus dem Keystore (.jks-Datei)

keytool -export -keystore keystore.jks -alias selfsigned -file selfsigned.crt

Der obige Schritt generiert eine Datei namens selfsigned.crt.Now Importiert das Zertifikat in Zertifikate

keytool -importcert -file selfsigned.crt -alias selfsigned -keystore {{cacerts path}}

z.B.

keytool -importcert -file selfsigned.nextgen.crt -alias selfsigned.nextgen -keystore /Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home/jre/lib/security/cacerts

Das ist alles, starten Sie Ihre Anwendung neu und es sollte funktionieren. Wenn es immer noch nicht funktioniert und eine SSL-Handshake-Ausnahme erhalten wird. Dies bedeutet wahrscheinlich, dass Sie eine andere Domäne verwenden, als im Zertifikat registriert ist.

Der Link mit ausführlicher Erklärung und Schritt für Schritt Auflösung ist hier vorbei.

2
Abhishek Galoda

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

Unable to read repository at http://cucumber.io/cucumber-Eclipse/update-site/content.xml.
    Unable to read repository at http://cucumber.io/cucumber-Eclipse/update-site/content.xml.
    Sun.security.validator.ValidatorException: PKIX path building failed: 
   Sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

Während einige der anderen Antworten für die gegebene Situation dieser Frage angemessen und hilfreich sind, waren sie für meine Angelegenheit nicht hilfreich und irreführend. 

In meinem Fall bestand das Problem darin, dass die URL für die Aktualisierungssite angegeben ist:

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

Bei der Navigation über einen Browser wurde jedoch zu weitergeleitet (beachten Sie das hinzugefügte ".github"):

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

Sie können also einfach die umgeleitete Version der Update-Site-URL verwenden, wenn Sie die Update-Site in Eclipse hinzufügen.

2
royfripple

Das Hinzufügen von cacerts hat bei mir nicht funktioniert . Nachdem das Protokoll mit dem Flag -Djavax.net.debug=all aktiviert wurde, lernte ich das Java-Lesen von jssecacerts kennen.

Der Import in jssecacerts hat endlich funktioniert.

2
alk453

Für mich ist ein Zertifikatfehler aufgetaucht, weil der Fiddler im Hintergrund ausgeführt wurde und das Zertifikat durcheinander gerät. Es fungiert als Proxy, der sich so nahe befindet, dass Eclipse neu gestartet wird.

0
Atihska

Wenn Sie oben einen Fehler mit der atlassian-Software haben. Jira

2018-08-18 11:35:00,312 Caesium-1-4 WARN anonymous    Default Mail Handler [c.a.mail.incoming.mailfetcherservice] Default Mail Handler[10001]: javax.mail.MessagingException: Sun.security.validator.ValidatorException: PKIX path building failed: Sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target while connecting to Host 'imap.xyz.pl' as user '[email protected]' via protocol 'imaps, 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

sie können dem vertrauenswürdigen Keystore Zertifikate hinzufügen (ändern Sie missing_ca in den richtigen Zertifikatsnamen):

keytool -importcert -file missing_ca.crt -alias missing_ca -keystore /opt/atlassian/jira/jre/lib/security/cacerts

Wenn Sie nach dem Passwort gefragt werden, setzen Sie changeit und bestätigen Sie y.

Danach einfach jira neu starten.

0
Karol Murawski

Dies ist eine Lösung, aber in Form meiner Geschichte mit diesem Problem:

Ich war fast tot, als ich die oben angegebene Lösung ausprobierte (für 3 Tage) und nichts funktionierte für mich.

Ich habe alle Hoffnung verloren.

Ich habe mein Sicherheitsteam diesbezüglich kontaktiert, weil ich hinter einem Proxy stand und sie sagten, dass sie kürzlich ihre Sicherheitsrichtlinien aktualisiert hatten.

Ich habe sie schlecht beschimpft, weil sie die Entwickler nicht informiert haben.

Später haben sie eine neue "cacerts" -Datei herausgegeben, die alle Zertifikate enthält.

Ich habe die cacerts-Datei in% Java_HOME%/jre/lib/security entfernt und mein Problem behoben.

Wenn Sie also mit diesem Problem konfrontiert sind, könnte es auch von Ihrem Netzwerkteam so sein.

0
Vikash Kumar

Es ist eine Ergänzung zur Antwort https://stackoverflow.com/a/36427118/1491414 . Danke @MagGGG

  • Bitte stellen Sie sicher, dass Sie über Administratorrechte verfügen
  • Bitte verwenden Sie doppelte Anführungszeichen für den Keystore-Pfad (-keystore C:\Programme (x86)\Java\jre1.6.0_22\lib\security\cacerts "), da unter Windows das Standardverzeichnis für die Installationsdateien die Programmdateien sind ein Fehler wegen Leerzeichen zwischen Programmdateien. 
0

Versuchen Sie, Java cacerts zu kopieren:

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

Ich habe das Problem mit der folgenden Methode behoben -

  1. Kopieren Sie die URL, die ein Verbindungsproblem hat
  2. Gehen Sie zu Android Studio-> Einstellungen-> HTTP-Einstellungen
  3. Fügen Sie in "Test Connection" diese URL ein und drücken Sie OK
  4. Wenn Sie auf Ok klicken, fordert Android Studio zum Importieren des Zertifikats dieser Url auf, importieren Sie es
  5. Das ist es. Nichts anderes zu tun und mein Problem war weg. Keine Notwendigkeit, Studio neu zu starten.
0
AndroDev

Wenn Sie CloudFoundry verwenden und auf ein Zertifikatproblem stoßen, müssen Sie sicherstellen, dass Sie das Glas erneut mit dem Keystore-Service mit dem darin enthaltenen Zertifikat senden. Einfach lösen, binden und neu starten geht nicht.

0
Smart Coder

Wenn Ihre Repository-URL auch auf HTTP funktioniert und die Sicherheit kein Problem darstellt, können Sie nach settings.xml gehen (häufig, aber nicht immer in %USERPROFILE%/.m2) und HTTPS durch HTTP ersetzen für <repository> und <pluginRepository> URLs.

Zum Beispiel das:

<repository>
    <snapshots>
        <enabled>false</enabled>
    </snapshots>
    <id>central</id>
    <name>libs-release</name>
    <url>https://<artifactory>/libs-release</url>
</repository>

sollte dadurch ersetzt werden:

<repository>
    <snapshots>
        <enabled>false</enabled>
    </snapshots>
    <id>central</id>
    <name>libs-release</name>
    <url>https://<artifactory>/libs-release</url>
</repository>
0

Ich habe meinen eigenen Trust Store anstelle von JRE verwendet, indem ich arg -Djavax.net.ssl.trustStore= übergeben habe.

Ich habe diesen Fehler unabhängig von Zertifikaten im Truststore erhalten. Das Problem war für mich die Anordnung der Eigenschaften, die an arg line übergeben wurden. Wenn ich -Djavax.net.ssl.trustStore= & -Djavax.net.ssl.trustStorePassword= before -Dspring.config.location= & -jar args legte, konnte ich meinen rest-Aufruf über https erfolgreich aufrufen. 

0
jasonoriordan

ich habe das gleiche Problem auf Ubuntu 15.10. Bitte versuchen Sie das Plugin lokal herunterzuladen, z. https://github.com/lmenezes/elasticsearch-kopf/archive/master.Zip und mit diesem Befehl installieren:

Sudo /usr/share/elasticsearch/bin/plugin install file:/home/dev/Downloads/elasticsearch-kopf-master.Zip

Der Pfad kann je nach Umgebung unterschiedlich sein. 

Grüße. 

0
user1379218

Normalerweise tritt diese Art von Ausnahme auf, wenn der Pfad des vertrauenswürdigen Zertifikats nicht übereinstimmt. Überprüfen Sie die Konfiguration oder den Pfad, in dem dieses Serverzertifikat für eine sichere Kommunikation erforderlich ist. 

0
ketan

Wenn dieses Problem in einem Linux-Container auftritt, wenn die Anwendung Java versucht, mit einer anderen Anwendung/Site zu kommunizieren, liegt dies daran, dass das Zertifikat falsch in den Load Balancer importiert wurde. Es gibt eine Reihe von Schritten, die zum Importieren von Zertifikaten ausgeführt werden müssen. Wenn diese Schritte nicht korrekt ausgeführt werden, treten Probleme wie die folgenden auf

Caused by: Sun.security.validator.ValidatorException: PKIX path building failed: Sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid 
certification path to requested target

Sobald die Zertifikate korrekt importiert wurden, sollte dies geschehen. Sie müssen keine JDK-Zertifikate basteln.

0
vsingh

Ich war mit demselben Problem konfrontiert und habe es mit den folgenden einfachen Schritten gelöst:

1) Laden Sie InstallCert.Java von Google herunter

2) Kompilieren Sie es mit javac InstallCert.Java.

3) Führen Sie InstallCert.Java mit Java InstallCert.Java mit dem Hostnamen und dem https-Port aus, und drücken Sie „1“, wenn Sie nach einer Eingabe fragen. Es wird den "localhost" als vertrauenswürdigen Schlüsselspeicher hinzufügen und eine Datei mit dem Namen "jssecacerts" wie folgt generieren:

Java InstallCert localhost: 443

4) Kopieren Sie die jssecacerts in den Ordner $ Java_HOME/jre/lib/security

Die Hauptquelle, um das Problem hier zu lösen, ist:

https://ankurjain26.blogspot.in/2017/11/javaxnetsslsslhandshakeexception.html

0
Ankur jain