"Budowa ścieżki PKIX nie powiodła się" i " nie można znaleźć prawidłowej ścieżki certyfikacyjnej do żądanego celu"

Próbuję uzyskać tweety za pomocą twitter4j biblioteki dla mojego projektu java. Przy pierwszym uruchomieniu otrzymałem błąd dotyczący certyfikatu sun.security.validator.ValidatorException i sun.security.provider.certpath.SunCertPathBuilderException. Następnie dodałem twitter certificate by:

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"
Ale bez powodzenia. Oto procedura, aby uzyskać twittery:
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());
    }

I tu jest błąd:

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
Author: JSK NS, 2014-01-12

21 answers

  1. Przejdź do adresu URL w przeglądarce firefox, kliknij łańcuch certyfikatów HTTPS (obok adresu URL). Kliknij "more info" > "security" > "show certificate" > "details" > "export..". Wybierz nazwę i wybierz przykład typu pliku.cer. Teraz masz plik z keystore i musisz dodać go do swojego JVM

  2. Określ lokalizację plików cacerts, np. C:\Program Files (x86)\Java\jre1.6.0_22\lib\security\cacerts.

  3. Następnie zaimportuj plik example.cer do cacerts w wierszu poleceń:

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

Zostaniesz poproszony o hasło, które domyślnie jest changeit

Restart Twój JVM / PC.

Źródło: http://magicmonster.com/kb/prg/java/ssl/pkix_path_building_failed.html

 283
Author: MagGGG,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-11 15:39:47

Po wielu godzinach próbowania zbudować pliki cert, aby moja instalacja Javy 6 działała z nowymi certami na Twitterze, w końcu natknąłem się na niezwykle proste rozwiązanie Zakopane w komentarzu na jednej z forów dyskusyjnych. Wystarczy skopiować plik cacerts z instalacji Java 7 i zastąpić ten z instalacji Java 6. Prawdopodobnie najlepiej najpierw zrobić kopię zapasową pliku cacerts, ale potem wystarczy skopiować nowy i BUM! to po prostu działa.

Zauważ, że faktycznie skopiowałem Windows plik cacerts na instalację Linuksa i działał dobrze.

Plik znajduje się w jre/lib/security/cacerts zarówno w starych, jak i nowych instalacjach Java jdk.

Mam nadzieję, że to oszczędzi komuś godzin niepokoju.

 64
Author: Jeremy Goodell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-02 06:15:04

Natknąłem się na ten problem, który zajął wiele godzin badań, aby naprawić, szczególnie z automatycznie generowanych certyfikatów, które w przeciwieństwie do oficjalnych, są dość trudne i Java nie lubi ich tak bardzo.

Proszę sprawdzić poniższy link: Rozwiąż Problem z certyfikatami w Javie

Zasadniczo musisz dodać certyfikat z serwera do certyfikatów Java Home.

  1. Wygeneruj lub Pobierz certyfikat i skonfiguruj Tomcat, aby używał go w Serwery.xml
  2. Pobierz kod źródłowy Javy klasy InstallCert i wykonaj go podczas działania serwera, podając następujące argumenty server[:port]. Nie jest potrzebne żadne Hasło, ponieważ oryginalne hasło działa dla Cert Java ("changeit").
  3. program połączy się z serwerem, a Java wyrzuci wyjątek, przeanalizuje certyfikat dostarczony przez serwer i pozwoli Ci utworzyć plik jssecerts wewnątrz katalogu, w którym wykonałeś Program (jeśli wykonałeś z Eclipse następnie upewnij się, że skonfigurowałeś katalog roboczy w Run -> Configurations).
  4. ręcznie skopiuj ten plik do $JAVA_HOME/jre/lib/security

Po wykonaniu tych kroków połączenia z certyfikatem nie będą już generować WYJĄTKÓW w środowisku Java.

Poniższy kod źródłowy jest ważny i zniknął z (Sun) blogów Oracle, jedyna strona, którą znalazłem, była na podanym linku, dlatego załączam go w odpowiedzi dla jakiegokolwiek odniesienia.

/*
 * 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
Author: will824,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-08 11:39:14

Moje podejście do interfejsu użytkownika:

  1. Pobierz http://www.keystore-explorer.org/
  2. Open $JAVA_HOME/jre/lib/security / cacerts
  3. wpisz PW: changeit (może być changeme na Mac)
  4. importuj swoje .plik crt

CMD-Line:

  1. keytool-importcert-file.crt-alias jetty-keystore $JAVA_HOME / jre/lib/security / cacerts
  2. wpisz PW: changeit (może być changeme na Mac)
 17
Author: Mike Mitterer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-22 14:06:23

Miałem nieco inną sytuację, gdy zarówno JDK, jak i JRE 1.8.0_112 były obecne w moim systemie.

Zaimportowałem nowe certyfikaty CA do [JDK_FOLDER]\jre\lib\security\cacerts używając znanej już komendy:

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

Wciąż otrzymywałem ten sam błąd budowania ścieżki PKIX.

Dodałem informacje o debugowaniu do Java CLI, używając java -Djavax.net.debug=all ... > debug.log. W debugowaniu.plik dziennika, linia zaczynająca się od trustStore to: faktycznie wskazuje na sklep cacerts znaleziony w [JRE_FOLDER]\lib\security\cacerts.

W moim przypadku rozwiązaniem było skopiowanie pliku cacerts używanego przez JDK (który miał nowy CAs dodany) na plik używany przez JRE i to naprawiło problem.

 10
Author: M. F.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-21 09:19:13

Chciałem zaimportować certyfikat dla smtp.gmail.com

Jedynym rozwiązaniem, które mi się udało jest 1. Wprowadź polecenie, aby wyświetlić ten certyfikat

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

  1. Skopiuj i zapisz linie pomiędzy "- - - - - - BEGIN CERTIFICATE - - - - - " i "- - - - - - End CERTIFICATE - - - - - " do pliku, gmail.cer

  2. Run

    Keytool-import-alias smtp.gmail.com -keystore "%JAVA_HOME% / jre / lib/security / cacerts " - plik C:\Users\Admin\Desktop\gmail.cer

  3. Wprowadź hasło chageit

  4. Kliknij tak, aby zaimportować certyfikat

  5. Restart java

Teraz uruchom polecenie i możesz iść

 6
Author: Sneha Shejwal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-14 21:52:40

1. Sprawdź certyfikat

Spróbuj załadować docelowy adres URL w przeglądarce i wyświetlić certyfikat witryny (zwykle jest dostępny za pomocą ikony ze znakiem blokady. Znajduje się po lewej lub prawej stronie paska adresu przeglądarki), niezależnie od tego, czy wygasł, czy nie jest zaufany z innego powodu.

2. Zainstaluj najnowsze wersje JRE i JDK

Nowe wersje zazwyczaj zawierają zaktualizowany zestaw zaufanych certyfikatów.

Jeśli to możliwe, Odinstaluj stare wersje. To sprawi, że błędy konfiguracji jawne.

3. Sprawdź swoją konfigurację:

  • sprawdź, gdzie wskazuje twoja zmienna środowiskowa JAVA_HOME.
  • sprawdź, której wersji Javy używasz do uruchomienia programu. In IntelliJ check:
    • Plik - > Struktura Projektu... - >Ustawienia projektu -> Projekt - > Project SDK:
    • Plik - > Struktura Projektu... - >Ustawienia Platformy - > SDK

4. Skopiuj cały keystore z nowej wersji Javy

Jeśli rozwijaj pod JDK innym niż najnowszy dostępny-spróbuj zastąpić plik %JAVA_HOME%/jre/lib/security/cacerts Nowym z najnowszego zainstalowanego JRE (najpierw zrób kopię zapasową), jak sugeruje @jeremy-goodell w swojej odpowiedzi

5. Dodaj certyfikat(y) do keystore

Jeśli nic powyżej nie rozwiąże problemu, użyj keytool, Aby zapisać certyfikat(y) w keystore Javy:

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

Plik z certyfikatem można uzyskać z przeglądarki, jak sugeruje @MagGGG w swoim odpowiedź .

Uwaga 1: może być konieczne powtórzenie tego dla każdego certyfikatu w łańcuchu do certyfikatu Twojej witryny. Zacznij od głównego.

Uwaga 2: <alias_name> powinien być unikalny wśród kluczy w sklepie lub keytool pokaże błąd.

Aby uzyskać listę wszystkich certyfikatów w sklepie możesz uruchomić:

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

Jeśli coś pójdzie nie tak, pomoże Ci to usunąć certyfikat ze sklepu:

keytool -delete -alias <alias_name> -keystore "%JAVA_HOME%jre\lib\security\cacerts" -storepass changeit
 5
Author: Lu55,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-15 11:32:36
-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true

Służy do przeskoczenia walidacji certyfikatu.

 4
Author: gorums,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-30 17:39:14

Tło Wydania:

Otrzymywałem następujący błąd podczas próby uruchomienia mvn clean install w moim projekcie i poprzez opcję NetBeans IDE clean and build. Ten problem jest spowodowany tym, że certyfikat nie jest dostępny, gdy pobieramy przez Net beans IDE / przez wiersz polecenia,ale możemy pobrać pliki za pośrednictwem przeglądarki.

Błąd :

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  

Rozdzielczość:

1. Pobierz certyfikat adresu Url w pytanie:

    W przeciwnym razie nie będziemy mogli pobrać certyfikatu.]}
  • wpisz adres url w IE -> https://url/local-repo (W moim przypadku ten url miał niezaufany certyfikatTutaj wpisz opis obrazka.)
  • Pobierz certyfikat, klikając Błąd certyfikatu -> Wyświetl certyfikat
  • wybierz kartę Szczegóły - > Kopiuj do pliku -> dalej - > wybierz "DER encoded binary X. 509 (.CER)
  • Zapisz certyfikat w niektórych lokalizacja, przykład : c:/user/sheldon/desktop/product.cer
  • Gratulacje! pomyślnie pobrano certyfikat dla witryny

2. Teraz zainstaluj magazyn kluczy, aby rozwiązać problem.

  • Uruchom polecenie keytool, aby dołączyć pobrany keystore do istniejący plik certyfikatu.
  • polecenie: poniżej polecenie w folderze bin jdk (JAVA_HOME) .

C:\Program Files \ Java \ jdk1.8. 0_141\jre\bin>keytool - importcert-file "C:/user/sheldon/desktop/product.cer " - alias produkt-keystore "C:/Program Files / Java/jdk1.8.0_141/jre/lib/security / cacerts".

  • zostaniesz poproszony o podanie hasła. Wprowadź hasło keystore: wprowadź ponownie "changeit "dla" Zaufaj temu certyfikatowi? [no]:", wpisz "tak"

Przykładowe polecenia/wyjście wiersza poleceń:

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! teraz powinieneś pozbyć się "pkix Path building failed: słońce.Ochrona.dostawca.certpath.Suncertpathbuilderexception " błąd w IDE Netbeans.
 4
Author: Barani r,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-29 09:01:28

To nie jest odpowiedź specyficzna dla Twittera, ale to jest pytanie, które pojawia się podczas wyszukiwania tego błędu. Jeśli Twój system otrzymuje ten błąd podczas łączenia się z witryną, która wydaje się mieć ważny certyfikat wyświetlany w przeglądarce internetowej , prawdopodobnie oznacza to, że Ta witryna ma niekompletny łańcuch certyfikatów.

Krótkie podsumowanie problemu: władze certyfikatów nie używają swojego certyfikatu głównego do podpisywania tylko starych certyfikatów. Zamiast tego, oni (Zwykle) sign intermediate certificates that also have the Certificate Authority flag set (czyli są dozwolone do podpisywania certyfikatów). Następnie, gdy kupujesz certyfikat od urzędu certyfikacji, podpisuje on twój certyfikat CSR jednym z tych certyfikatów pośrednich.

Twój sklep zaufania Java najprawdopodobniej ma tylko certyfikat główny, a nie pośredni.

Strona może zwrócić jedynie podpisany przez siebie cert. Problem: został podpisany pośrednim certyfikatem, którego nie ma w Twój sklep zaufania. Przeglądarki poradzą sobie z tym problemem, pobierając lub używając buforowanego certyfikatu pośredniego; to maksymalizuje kompatybilność witryny. Java i narzędzia takie jak OpenSSL, jednak nie. i to spowoduje błąd w pytaniu.

Możesz zweryfikować to podejrzenie za pomocą testu Qualys SSL . Jeśli uruchomisz to na stronie i będzie napisane

Łańcuch certyfikatów serwera jest niekompletny.

Więc to potwierdza. Zobacz też patrząc na ścieżki certyfikacji i widząc tekst Extra Download .

Jak to naprawić: administrator serwera musi skonfigurować serwer WWW, aby zwracał również certyfikaty pośrednie. Na przykład w Comodo przydaje się plik .ca-bundle. Na przykład, w konfiguracji Apache z mod_ssl, można użyć ustawienia konfiguracji SSLCertificateChainFile. W przypadku nginx musisz połączyć certyfikaty pośrednie i podpisany certyfikat i użyć go w Konfiguracja certyfikatu SSL. Możesz znaleźć więcej, wyszukując "niekompletny łańcuch certyfikatów" online.

 3
Author: Reid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-30 00:13:45

Natknąłem się na to pytanie podczas próby zainstalowania wtyczki Cucumber-Eclipse w Eclipse za pośrednictwem ich strony aktualizacji. Otrzymałem ten sam błąd SunCertPathBuilderException:

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

Podczas gdy niektóre z innych odpowiedzi są odpowiednie i pomocne w danej sytuacji tego pytania, były one jednak nieprzydatne i mylące dla mojego problemu.

W moim przypadku problem polegał na tym, że adres URL podany dla ich witryny aktualizacji to:

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

Jednak gdy nawigacja do niego przez przeglądarkę, przekierowuje do (zauważ dodane ".github"):

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

Więc rozdzielczość jest po prostu użyć przekierowanej wersji URL witryny aktualizacji podczas dodawania witryny aktualizacji w eclipse.

 2
Author: royfripple,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-03 03:36:19

Dodanie cacerts nie zadziałało. Po włączeniu logu z flagą -Djavax.net.debug=all, Potem przyszedł do java Czytanie z jssecacerts.

Import do jssecacerts zadziałał w końcu.

 2
Author: alk453,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-14 10:31:51

Tutaj Zwykle tego rodzaju wyjątek występuje, gdy w ścieżce zaufanego certyfikatu występuje niedopasowanie. Sprawdź konfigurację lub ścieżkę, w której ten certyfikat serwera jest wymagany do bezpiecznej komunikacji.

 0
Author: ketan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-12 19:32:53

Mam ten sam problem na ubuntu 15.10. Proszę spróbować pobrać wtyczkę lokalnie np. https://github.com/lmenezes/elasticsearch-kopf/archive/master.zip i zainstalować za pomocą tego polecenia:

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

Ścieżka może być inna w zależności od środowiska.

Pozdrawiam.
 0
Author: user1379218,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-06 19:32:25

Dla mnie pojawił się błąd certyfikatu, ponieważ miałem fiddlera działającego w tle i to psuje certificate. Działa jako proxy tak blisko, że i ponownie uruchomić eclipse.

 0
Author: Atihska,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-21 01:09:59

Miałem do czynienia z tym samym problemem i rozwiązać go za pomocą poniższych prostych kroków:

1) Pobierz InstallCert.java od google

2) skompilować go za pomocą javac InstallCert.java

3) Uruchom InstallCert.java using java InstallCert.java , z nazwą hosta i portem https, i naciśnij "1", pytając o wejście. Doda" localhost "jako zaufany keystore i wygeneruje plik o nazwie "jssecacerts"jak poniżej:

Java InstallCert localhost:443

4) skopiuj jssecacerts do folderu $JAVA_HOME/jre/lib / security

Głównym źródłem rozwiązania problemu jest:

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

Pozdrawiam,

Ankur

 0
Author: Ankur jain,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-06 16:20:57

To dodatek do odpowiedzi https://stackoverflow.com/a/36427118/1491414 . Thanks @ MagGGG

  • upewnij się, że masz uprawnienia administratora
  • Proszę używać podwójnych cudzysłowów dla ścieżki keystore (- keystore C:\Program Files (x86)\Java\jre1.6.0_22\lib\security \ cacerts") ponieważ w systemie operacyjnym Windows domyślną lokalizacją instalacji będą Pliki programów i pojawi się błąd z powodu odstępu między plikami programów.
 0
Author: Ganesa Vijayakumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-23 20:32:12

Naprawiłem to używając poniższej metody -

  1. Skopiuj adres url, który ma problem z połączeniem
  2. przejdź do Android Studio->Ustawienia - > Ustawienia Http
  3. w polu' Test Connection ' wklej ten adres url i naciśnij ok
  4. Po kliknięciu Ok, Android Studio poprosi o zaimportowanie certyfikatu tego url, import it
  5. To wszystko. Nic innego nie było do zrobienia, a mój problem zniknął. Nie ma potrzeby zrestartuj również studio.
 0
Author: AndroDev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-23 10:51:23

Gdy wystąpi powyższy błąd w oprogramowaniu atlassian ex. 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

Możesz dodać Cert do zaufanego keystore (Zmień missing_ca na właściwą nazwę cert):

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

Jeśli zapytasz o hasło wpisz changeit i potwierdź y

Po prostu uruchom ponownie jira.

 0
Author: Karol Murawski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-18 10:27:47

Powodem, dla którego otrzymujemy powyższy błąd, jest to, że JDK jest dołączony do wielu certyfikatów trusted Certificate Authority(CA) w pliku o nazwie "cacerts", ale ten plik nie ma pojęcia o naszym certyfikacie z własnym podpisem. Innymi słowy, plik cacerts nie ma zaimportowanego certyfikatu z własnym podpisem, a zatem nie traktuje go jako zaufanego podmiotu, a zatem daje powyższy błąd.

Jak naprawić powyższy błąd

Aby naprawić powyższy błąd, wystarczy zaimportować własnoręcznie podpisany certyfikat do pliku cacerts.

Najpierw zlokalizuj plik cacerts. Musimy znaleźć lokalizację JDK. Jeśli uruchamiasz aplikację za pośrednictwem jednego z IDE, takiego jak Eclipse lub IntelliJ Idea, przejdź do ustawień projektu i dowiedz się, jaka jest lokalizacja JDK. Na przykład na Mac OS typowa lokalizacja pliku cacerts będzie w tej lokalizacji /Library / Java / JavaVirtualMachines / {{Jdk_version}} / Contents / Home / jre / lib / security na maszynie okiennej byłoby pod {{Installation_directory}} / {{jdk_version}} / jre / lib / security

Po zlokalizowaniu pliku cacerts, teraz musimy zaimportować nasz własnoręcznie podpisany certyfikat do tego pliku cacerts. Sprawdź ostatni artykuł, jeśli nie wiesz, jak poprawnie wygenerować certyfikat z podpisem własnym.

Jeśli nie masz pliku certyfikatu(.crt) i po prostu mieć .plik jks możesz wygenerować .plik crt za pomocą poniższego polecenia. W przypadku, gdy już masz .crt/plik pem możesz zignorować poniżej polecenie

# # Aby wygenerować certyfikat z keystore(.plik jks) # # # #

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

Powyższy krok wygeneruje plik o nazwie selfsigned.crt.Teraz zaimportuj certyfikat do cacerts

Teraz dodaj certyfikat do JRE / lib / security/cacerts (trustore)
keytool -importcert -file selfsigned.crt -alias selfsigned -keystore {{cacerts path}}
Teraz dodaj certyfikat do JRE / lib / security/cacerts (trustore)
keytool -importcert -file selfsigned.crt -alias selfsigned -keystore {{cacerts path}}

Dla np

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

To wszystko, uruchom ponownie aplikację i powinna działać dobrze. Jeśli nadal nie działa i otrzymasz wyjątek SSL handshake. Prawdopodobnie oznacza, że używasz innej domeny zarejestrowanej w certyfikacie.

Link ze szczegółowym wyjaśnieniem i rozdzielczością krok po kroku jest tutaj.

 0
Author: Abhishek Galoda,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-04 09:44:36

Bramki:

  1. użyj połączeń https
  2. Sprawdź łańcuchy SSL
  3. nie zajmuj się kakaowcami
  4. Dodaj certyfikat w runtime
  5. nie trać certyfikatów od cacertów

Jak to zrobić:

  1. zdefiniuj własny keystore
  2. Umieść certyfikat w keystore
  3. przedefiniuj domyślny kontekst SSL za pomocą naszej niestandardowej klasy
  4. ???
  5. zysk

Mój plik wrappera Keystore:

public class CertificateManager {

    private final static Logger logger = Logger.getLogger(CertificateManager.class);

    private String keyStoreLocation;
    private String keyStorePassword;
    private X509TrustManager myTrustManager;
    private static KeyStore myTrustStore;

    public CertificateManager(String keyStoreLocation, String keyStorePassword) throws Exception {
        this.keyStoreLocation = keyStoreLocation;
        this.keyStorePassword = keyStorePassword;
        myTrustStore = createKeyStore(keyStoreLocation, keyStorePassword);
    }

    public void addCustomCertificate(String certFileName, String certificateAlias)
            throws Exception {
        TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
        tmf.init((KeyStore) null);
        Certificate certificate = myTrustStore.getCertificate(certificateAlias);
        if (certificate == null) {
            logger.info("Certificate not exists");
            addCertificate(certFileName, certificateAlias);
        } else {
            logger.info("Certificate exists");
        }
        tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
        tmf.init(myTrustStore);
        for (TrustManager tm : tmf.getTrustManagers()) {
            if (tm instanceof X509TrustManager) {
                setMytrustManager((X509TrustManager) tm);
                logger.info("Trust manager found");
                break;
            }
        }
    }

    private InputStream fullStream(String fname) throws IOException {
        ClassLoader classLoader = getClass().getClassLoader();
        InputStream resource = classLoader.getResourceAsStream(fname);
        try {
            if (resource != null) {
                DataInputStream dis = new DataInputStream(resource);
                byte[] bytes = new byte[dis.available()];
                dis.readFully(bytes);
                return new ByteArrayInputStream(bytes);
            } else {
                logger.info("resource not found");
            }
        } catch (Exception e) {
            logger.error("exception in certificate fetching as resource", e);
        }
        return null;
    }

    public static KeyStore createKeyStore(String keystore, String pass) throws Exception {
        try {
            InputStream in = CertificateManager.class.getClass().getResourceAsStream(keystore);
            KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
            keyStore.load(in, pass.toCharArray());
            logger.info("Keystore was created from resource file");
            return keyStore;
        } catch (Exception e) {
            logger.info("Fail to create keystore from resource file");
        }

        File file = new File(keystore);
        KeyStore keyStore = KeyStore.getInstance("JKS");
        if (file.exists()) {
            keyStore.load(new FileInputStream(file), pass.toCharArray());
            logger.info("Default keystore loaded");
        } else {
            keyStore.load(null, null);
            keyStore.store(new FileOutputStream(file), pass.toCharArray());
            logger.info("New keystore created");
        }
        return keyStore;
    }

    private void addCertificate(String certFileName, String certificateAlias) throws CertificateException,
            IOException, KeyStoreException, NoSuchAlgorithmException {
        CertificateFactory cf = CertificateFactory.getInstance("X.509");
        InputStream certStream = fullStream(certFileName);
        Certificate certs = cf.generateCertificate(certStream);
        myTrustStore.setCertificateEntry(certificateAlias, certs);
        FileOutputStream out = new FileOutputStream(getKeyStoreLocation());
        myTrustStore.store(out, getKeyStorePassword().toCharArray());
        out.close();
        logger.info("Certificate pushed");
    }

    public String getKeyStoreLocation() {
        return keyStoreLocation;
    }

    public String getKeyStorePassword() {
        return keyStorePassword;
    }
    public X509TrustManager getMytrustManager() {
        return myTrustManager;
    }
    public void setMytrustManager(X509TrustManager myTrustManager) {
        this.myTrustManager = myTrustManager;
    }
}

Ta klasa utworzy keystore jeśli niezbędne i będzie w stanie zarządzać certyfikatami wewnątrz niego. Teraz klasa dla kontekstu SSL:

public class CustomTrustManager implements X509TrustManager {

    private final static Logger logger = Logger.getLogger(CertificateManager.class);

    private static SSLSocketFactory socketFactory;
    private static CustomTrustManager instance = new CustomTrustManager();
    private static List<CertificateManager> register = new ArrayList<>();

    public static CustomTrustManager getInstance() {
        return instance;
    }

    private X509TrustManager defaultTm;

    public void register(CertificateManager certificateManager) {
        for(CertificateManager manager : register) {
            if(manager == certificateManager) {
                logger.info("Certificate manager already registered");
                return;
            }
        }
        register.add(certificateManager);
        logger.info("New Certificate manager registered");
    }

    private CustomTrustManager() {
        try {
            String algorithm = TrustManagerFactory.getDefaultAlgorithm();
            TrustManagerFactory tmf = TrustManagerFactory.getInstance(algorithm);

            tmf.init((KeyStore) null);
            boolean found = false;
            for (TrustManager tm : tmf.getTrustManagers()) {
                if (tm instanceof X509TrustManager) {
                    defaultTm = (X509TrustManager) tm;
                    found = true;
                    break;
                }
            }
            if(found) {
                logger.info("Default trust manager found");
            } else {
                logger.warn("Default trust manager was not found");
            }

            SSLContext sslContext = SSLContext.getInstance("TLS");
            sslContext.init(null, new TrustManager[]{this}, null);
            SSLContext.setDefault(sslContext);
            socketFactory = sslContext.getSocketFactory();
            HttpsURLConnection.setDefaultSSLSocketFactory(socketFactory);


            logger.info("Custom trust manager was set");
        } catch (NoSuchAlgorithmException | KeyManagementException | KeyStoreException e) {
            logger.warn("Custom trust manager can't be set");
            e.printStackTrace();
        }
    }

    @Override
    public X509Certificate[] getAcceptedIssuers() {
        List<X509Certificate> out = new ArrayList<>();
        if (defaultTm != null) {
            out.addAll(Arrays.asList(defaultTm.getAcceptedIssuers()));
        }
        int defaultCount = out.size();
        logger.info("Default trust manager contain " + defaultCount + " certficates");
        for(CertificateManager manager : register) {
            X509TrustManager customTrustManager = manager.getMytrustManager();
            X509Certificate[] issuers = customTrustManager.getAcceptedIssuers();
            out.addAll(Arrays.asList(issuers));
        }
        logger.info("Custom trust managers contain " + (out.size() - defaultCount) + " certficates");
        X509Certificate[] arrayOut = new X509Certificate[out.size()];
        return out.toArray(arrayOut);
    }

    @Override
    public void checkServerTrusted(X509Certificate[] chain,
                                   String authType) throws CertificateException {
        for(CertificateManager certificateManager : register) {
            X509TrustManager customTrustManager = certificateManager.getMytrustManager();
            try {
                customTrustManager.checkServerTrusted(chain, authType);
                logger.info("Certificate chain (server) was aproved by custom trust manager");
                return;
            } catch (Exception e) {
            }
        }
        if (defaultTm != null) {
            defaultTm.checkServerTrusted(chain, authType);
            logger.info("Certificate chain (server) was aproved by default trust manager");
        } else {
            logger.info("Certificate chain (server) was rejected");
            throw new CertificateException("Can't check server trusted certificate.");
        }
    }

    @Override
    public void checkClientTrusted(X509Certificate[] chain,
                                   String authType) throws CertificateException {
        try {
            if (defaultTm != null) {
                defaultTm.checkClientTrusted(chain, authType);
                logger.info("Certificate chain (client) was aproved by default trust manager");
            } else {
                throw new NullPointerException();
            }
        } catch (Exception e) {
            for(CertificateManager certificateManager : register) {
                X509TrustManager customTrustManager = certificateManager.getMytrustManager();
                try {
                    customTrustManager.checkClientTrusted(chain, authType);
                    logger.info("Certificate chain (client) was aproved by custom trust manager");
                    return;
                } catch (Exception e1) {
                }
            }
            logger.info("Certificate chain (client) was rejected");
            throw new CertificateException("Can't check client trusted certificate.");
        }
    }

    public SSLSocketFactory getSocketFactory() {
        return socketFactory;
    }
}

Ta klasa wykonana jako singleton, ponieważ dozwolony jest tylko jeden kontekst defaultSSL. Tak, teraz użycie:

            CertificateManager certificateManager = new CertificateManager("C:\\myapplication\\mykeystore.jks", "changeit");
            String certificatePath = "C:\\myapplication\\public_key_for_your_ssl_service.crt";
            try {
                certificateManager.addCustomCertificate(certificatePath, "alias_for_public_key_for_your_ssl_service");
            } catch (Exception e) {
                log.error("Can't add custom certificate");
                e.printStackTrace();
            }
            CustomTrustManager.getInstance().register(certificateManager);

Możliwe, że nie będzie działać z tymi ustawieniami, ponieważ przechowuję plik certyfikatu w folderze zasobów, więc Moja ścieżka nie jest bezwzględna. Ale ogólnie działa idealnie.

 -1
Author: degr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-24 11:56:00