„Erstellen des PKIX-Pfads fehlgeschlagen“ und „Kein gültiger Zertifizierungspfad zum angeforderten Ziel gefunden“

Lesezeit: 15 Minuten

„Erstellen des PKIX Pfads fehlgeschlagen und „Kein gultiger Zertifizierungspfad zum angeforderten
bofanda

Ich versuche, Tweets mit der twitter4j-Bibliothek für mein Java-Projekt zu erhalten, das unter der Decke verwendet wird java.net.HttpURLConnection (wie im Stacktrace ersichtlich). Bei meinem ersten Lauf bekam ich einen Fehler bezüglich des Zertifikats sun.security.validator.ValidatorException und sun.security.provider.certpath.SunCertPathBuilderException. Dann habe ich das 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 Tweets:

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

  • Hallo. Bitte überprüfen Sie die folgende URL. Ich bin sicher, diese werden Ihnen helfen. java-samples.com/showtutorial.php?tutorialid=210 confluence.atlassian.com/display/JIRAKB/…. Sie müssen Ihr SSL-Zertifikat zum Java-Truststore-Zertifikat hinzufügen (Pfad: jre/lib/security/cacerts).

    – sus007

    1. Dezember 2014 um 13:59 Uhr

  • Bitte beziehen Sie sich auf diese Antwort für die Lösung und bestätigen Sie, dass Sie Ihre Software als gebündeltes jre packen? Wenn ja, kopieren Sie Ihr cacerts-Dateiformularsystem und ersetzen Sie diese gepackte jre cacerts-Datei.

    – positive Krux

    4. November 2016 um 7:49 Uhr

  • versuchen Sie es mit stackoverflow.com/a/9210661/4741746, vielleicht ist dies Ihre Antwort

    – sushant gosavi

    7. November 2016 um 12:32 Uhr

  • Ich habe gerade diesen Java-Code verwendet und für https nicht vergessen, den Port als 443 anzugeben. Java-Code unter github.com/escline/InstallCert/blob/master/InstallCert.java Es nimmt Ihre CACERTS-Datei und fügt all diese plus das aktuelle Zertifikat für die URL hinzu, die Sie als Eingabe angeben. In meinem Fall habe ich die Werte fest auf host=”mywebservice.uat.xyz.com” codiert; port=443; passphrase=”changeit”.toCharArray(); Dann erstellt das Programm eine neue Datei namens “jssecacerts”, die alles enthalten wird. Benennen Sie dies in “cacerts” um und verwenden Sie diese . Sie werden bereit sein.

    – Reddymails

    13. Juni 2017 um 17:51 Uhr

  • Beantwortet das deine Frage? Beheben von javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX-Pfadaufbau fehlgeschlagen Fehler?

    – Rogerpack

    22. Februar 2021 um 16:08 Uhr

„Erstellen des PKIX Pfads fehlgeschlagen und „Kein gultiger Zertifizierungspfad zum angeforderten
Jeremy Goodell

Nachdem ich viele Stunden lang versucht hatte, Zertifikatsdateien zu erstellen, damit meine Java 6-Installation mit den neuen Twitter-Zertifikaten funktioniert, bin ich schließlich auf eine unglaublich einfache Lösung gestoßen, die in einem Kommentar in einem der Message Boards vergraben war. Kopieren Sie einfach die cacerts-Datei aus einer Java 7-Installation und überschreiben Sie die in Ihrer Java 6-Installation. Wahrscheinlich ist es am besten, zuerst eine Sicherungskopie der cacerts-Datei zu erstellen, aber dann kopieren Sie einfach die neue Datei hinein und BOOM! es funktioniert einfach.

Beachten Sie, dass ich tatsächlich eine Windows-cacerts-Datei auf eine Linux-Installation kopiert habe und es einwandfrei funktioniert hat.

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 jemand anderem Stunden des Ärgers.

  • Ich versuche, mit einem selbstsignierten Zertifikat auf einen SSL-Server zuzugreifen, habe versucht, sein Zertifikat mit Keytool hinzuzufügen, aber kein Glück, irgendwelche Vorschläge?

    – Oleg Belousow

    3. März 2014 um 17:10 Uhr

  • Ich bin froh, dass es funktioniert hat. Aber wissen Sie, was die Ursache war? Was hat dazu geführt, dass es mit Java 6-Zertifikaten fehlgeschlagen ist. Und wie haben die Java 7-Zertifikate das Problem behoben

    – Vishwanath gowda k

    29. Oktober 2014 um 7:01 Uhr


  • Dies hat es getan, obwohl ich von icedtea 1.6 zu oracle 1.7 gewechselt bin. 🙂

    – mike3996

    15. November 2014 um 13:42 Uhr

  • Ziehen Sie auch diese Lösung in Betracht: stackoverflow.com/questions/33439905/…

    – Piohen

    12. April 2016 um 14:37 Uhr

  • Für diejenigen, die wie ich manchmal das Offensichtliche verpassen – stellen Sie sicher, dass Sie darauf eingehen $JAVA_HOME/jre/libnicht $JAVA_HOME/lib — Ich habe ein bisschen Zeit damit verbracht, dieses Detail zu übersehen.

    – Ryan Heathcote

    14. Juli 2016 um 16:47 Uhr

  • Auf einem Mac mit CMD-Line sollte sudo verwendet werden, um den Befehl auszuführen. # sudo keytool -importcert -file jetty.crt -alias jetty -keystore $JAVA_HOME/jre/lib/security/cacerts

    – Malajisi

    20. März 2017 um 9:56 Uhr


  • Unter Windows funktioniert der Befehl: keytool -importcert -file dinardap_cert.cer –alias dinardap –keystore “%JAVA_HOME%/jre/lib/security/cacerts”

    – Gabriel Patricio Bonilla

    26. Juli 2017 um 20:13 Uhr


  • wo bekommt man die cert datei her? Ich kann nicht sagen, zu welcher URL ich gehen soll. Steg. com ?

    – Kraftteufel

    5. September 2017 um 2:13 Uhr


  • Ich habe mein Zertifikat erhalten, indem ich es aus dem Webbrowser exportiert habe, Kontextaktion auf dem Vorhängeschloss

    – rtbf

    2. März 2020 um 13:51 Uhr

  • Dies scheint viel einfacher zu sein, als von der Befehlszeile aus zu arbeiten.

    – Vasudevan Kannan

    9. Juli 2020 um 17:02 Uhr

„Erstellen des PKIX Pfads fehlgeschlagen und „Kein gultiger Zertifizierungspfad zum angeforderten
Lu55

1. Prüfen Sie das Zertifikat

Versuchen Sie, die Ziel-URL im Browser zu laden und das Zertifikat der Website anzuzeigen (normalerweise ist es über das Symbol mit dem Schlosssymbol zugänglich. Es befindet sich auf der linken oder rechten Seite der Adressleiste des Browsers), unabhängig davon, ob es abgelaufen 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 der vertrauenswürdigen Zertifikate geliefert.

Wenn es möglich ist, deinstallieren Sie auch alte Versionen. Dadurch werden Fehlkonfigurationsfehler deutlich.

3. Überprüfen Sie Ihre Konfiguration:

  • Überprüfen Sie, wohin Ihre Umgebungsvariable JAVA_HOME zeigt.
  • Überprüfen Sie, welche Java-Version Sie zum Ausführen des Programms verwenden. In IntelliJ prüfen:
    • Datei -> Projektstruktur… -> Projekteinstellungen -> Projekt -> Projekt-SDK:
    • Datei -> Projektstruktur… -> Plattformeinstellungen -> SDKs

4. Kopieren Sie den gesamten Schlüsselspeicher aus der neuen Java-Version

Wenn Sie unter dem JDK etwas anderes als das neueste verfügbare entwickeln, versuchen Sie, das zu ersetzen %JAVA_HOME%/jre/lib/security/cacerts Datei mit der neuen aus der zuletzt installierten JRE (erstellen Sie zuerst eine Sicherungskopie), wie @jeremy-goodell in seiner Antwort vorschlägt

5. Fügen Sie Zertifikate zu Ihrem Schlüsselspeicher hinzu

Wenn nichts oben genanntes Ihr Problem löst, verwenden Sie keytool So speichern Sie Zertifikate im Keystore von Java:

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 zum Zertifikat Ihrer Site wiederholen. Beginnen Sie mit der Wurzel.

Anmerkung 2: <alias_name> sollte unter den Schlüsseln im Geschäft eindeutig sein oder keytool wird einen Fehler anzeigen.

Um eine Liste aller Zertifikate im Speicher zu erhalten, können Sie Folgendes ausführen:

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

Falls etwas schief geht, hilft Ihnen dies, das Zertifikat aus dem Speicher zu entfernen:

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

  • So gut ausgearbeitet dies ist, sollte es die akzeptierte Antwort sein.

    – Jegor Hans

    23. März 2020 um 10:10 Uhr

  • Sollte sein keytool -list -trustcacerts -keystore "$JAVA_HOME/jre/lib/security/cacerts" -storepass changeit auf Mac

    – Franz Bacon

    1. Juli 2020 um 4:35 Uhr

  • Ich habe versucht, mit einem von LetsEncrypt generierten Zertifikat auf eine Website zuzugreifen, und ein Upgrade auf eine Java-Version >= 8u101 hat das Problem behoben – letsencrypt.org/docs/certificate-compatibility

    – paulcm

    10. September 2020 um 14:31 Uhr

1646713033 381 „Erstellen des PKIX Pfads fehlgeschlagen und „Kein gultiger Zertifizierungspfad zum angeforderten
Mathias m

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

Es wird verwendet, um die Zertifikatsvalidierung zu überspringen.

Warnung
Nur für Entwicklungszwecke verwenden, da dies unsicher ist!

  • So gut ausgearbeitet dies ist, sollte es die akzeptierte Antwort sein.

    – Jegor Hans

    23. März 2020 um 10:10 Uhr

  • Sollte sein keytool -list -trustcacerts -keystore "$JAVA_HOME/jre/lib/security/cacerts" -storepass changeit auf Mac

    – Franz Bacon

    1. Juli 2020 um 4:35 Uhr

  • Ich habe versucht, mit einem von LetsEncrypt generierten Zertifikat auf eine Website zuzugreifen, und ein Upgrade auf eine Java-Version >= 8u101 hat das Problem behoben – letsencrypt.org/docs/certificate-compatibility

    – paulcm

    10. September 2020 um 14:31 Uhr

1646713033 244 „Erstellen des PKIX Pfads fehlgeschlagen und „Kein gultiger Zertifizierungspfad zum angeforderten
Shashank Agrawal

Ich bin auf dieses Problem gestoßen, dessen Behebung viele Stunden der Recherche erforderte, insbesondere bei automatisch generierten Zertifikaten, die im Gegensatz zu offiziellen Zertifikaten ziemlich knifflig sind und Java sie nicht so sehr mag.

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 erhalten Sie Ihr Zertifikat und konfigurieren Sie Tomcat so, dass es in Servers.xml verwendet wird
  2. Laden Sie den Java-Quellcode der Klasse herunter InstallCert und führen Sie es aus, während der Server läuft, und geben Sie die folgenden Argumente an server[:port]. Es wird kein Passwort benötigt, da das ursprüngliche Passwort für die Java-Zertifikate (“changeit”) funktioniert.
  3. Das Programm stellt eine Verbindung zum Server her und Java löst eine Ausnahme aus, analysiert das vom Server bereitgestellte Zertifikat und ermöglicht Ihnen, ein zu erstellen jssecerts Datei in dem Verzeichnis, in dem Sie das Programm ausgeführt haben (Wenn es von Eclipse ausgeführt wird, stellen Sie sicher, dass Sie das Arbeitsverzeichnis in konfigurieren 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 aus (Sun) Oracle-Blogs verschwunden. Die einzige Seite, auf der ich ihn gefunden habe, war der angegebene Link. Daher füge ich ihn 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);
        }
    }
}

  • Beachten Sie, dass die erstellte Datei jssecacerts ist!

    – DeanDP

    3. Februar 2016 um 20:10 Uhr

  • Ich habe versucht, diese Lösung für Java 7 und 8 zu verwenden. Während der Ausführung unter Java 7 erhielt ich protocol_version oder handshake_failure für alle Remote-Repository-URLs, mit denen ich es versucht habe. 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

    – Sandeepan Nath

    11. Juni 2020 um 17:38 Uhr

971930cookie-check„Erstellen des PKIX-Pfads fehlgeschlagen“ und „Kein gültiger Zertifizierungspfad zum angeforderten Ziel gefunden“

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy