‘PKIX-padopbouw mislukt’ en ‘geen geldig certificeringspad naar aangevraagd doel gevonden’

Ik probeer tweets te krijgen met behulp van de twitter4j-bibliotheek voor mijn java-project dat onder de covers java.net.HttpURLConnectiongebruikt (zoals te zien is in stacktracering). Bij mijn eerste run kreeg ik een foutmelding over certificaat sun.security.validator.ValidatorExceptionen sun.security.provider.certpath.SunCertPathBuilderException. Daarna heb ik een Twitter-certificaat toegevoegd door:

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"

Maar zonder succes. Hier is de procedure om tweets te ontvangen:

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

En hier is de fout:

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

Antwoord 1, autoriteit 100%

  1. Ga naar URL in uw browser:
  • firefox – klik op HTTPS-certificaatketen (het slotpictogram naast het URL-adres). Klik op "more info" > "security" > "show certificate" > "details" > "export..". Pak de naam op en kies het bestandstype voorbeeld.cer
  • chrome – klik op het sitepictogram links om te adresseren in de adresbalk, selecteer “Certificaat” -> “Details” -> “Exporteren” en opslaan in het formaat “Der-encoded binary, single certificate”.
  1. Je hebt nu een bestand met keystore en je moet het toevoegen aan je JVM. Bepaal de locatie van cacerts-bestanden, bijv.
    C:\Program Files (x86)\Java\jre1.6.0_22\lib\security\cacerts.

  2. Importeer vervolgens het bestand example.cerin cacerts in de opdrachtregel (mogelijk de opdrachtprompt van de beheerder nodig):

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

U wordt gevraagd om een wachtwoord dat standaard changeit

is

Start uw JVM/pc opnieuw op.

bron:
http://magicmonster.com/kb/prg/java/ssl/pkix_path_building_failed.html


Antwoord 2, autoriteit 12%

Na vele uren proberen om cert-bestanden te bouwen om mijn Java 6-installatie werkend te krijgen met de nieuwe twitter-cert’s, stuitte ik eindelijk op een ongelooflijk eenvoudige oplossing begraven in een opmerking in een van de prikborden. Kopieer het cacerts-bestand van een Java 7-installatie en overschrijf het bestand in uw Java 6-installatie. Waarschijnlijk het beste om eerst een back-up te maken van het cacerts-bestand, maar dan kopieer je gewoon de nieuwe en BOOM! het werkt gewoon.

Merk op dat ik een Windows-cacerts-bestand naar een Linux-installatie heb gekopieerd en dat het prima werkte.

Het bestand bevindt zich in jre/lib/security/cacertsin zowel de oude als de nieuwe Java jdk-installaties.

Hopelijk bespaart dit iemand anders uren ergernis.


Antwoord 3, autoriteit 9%

MIJN UI-aanpak:

  1. Download keystore-verkenner van hier
  2. Open $JAVA_HOME/jre/lib/security/cacerts
  3. voer PW: changeit in (kan changeme zijn op Mac)
  4. Importeer uw .crt-bestand

CMD-lijn:

  1. keytool -importcert -file jetty.crt -alias jetty -keystore $JAVA_HOME/jre/lib/security/cacerts
  2. voer PW in: changeit(Kan changeme zijn op Mac)

Antwoord 4, autoriteit 4%

1. Controleer het certificaat

Probeer de doel-URL in de browser te laden en het certificaat van de site te bekijken (meestal is dit toegankelijk via het pictogram met het slotteken. Het staat aan de linker- of rechterkant van de adresbalk van de browser), ongeacht of het om een andere reden is verlopen of niet vertrouwd.

2. Installeer de nieuwste versies van JRE en JDK

Nieuwe versies worden meestal geleverd met de bijgewerkte set van vertrouwde certificaten.

Als het mogelijk is, verwijder dan ook oude versies. Hierdoor worden foutieve configuratiefouten expliciet gemaakt.

3. Controleer uw configuratie:

  • Controleer waar uw Java_Home-omgeving variabele punten naar.
  • Controleer welke Java-versie u gebruikt om het programma uit te voeren. In Intellij Check:
    • Bestand – & GT; Projectstructuur … – & GT; Projectinstellingen – & GT; Project – & GT; Project SDK:
    • Bestand – & GT; Projectstructuur … – & GT; Platforminstellingen – & GT; SDKS

4. Kopieer hele keystore uit de nieuwe Java-versie

Als u zich ontwikkelt onder de JDK-andere dan de meest recente beschikbare – probeer de %JAVA_HOME%/jre/lib/security/cacertsbestand met de nieuwe uit de nieuwste geïnstalleerde JRE (maak een Back-up kopie eerst) Als @ Jeremy-Goodell suggereert in zijn antwoord

5. Voeg certificaat (en) toe aan uw KeyStore

Als er niets boven het probleem oplost, gebruik dan keytoolom certificaat (en) op te slaan op de Java’s KeyStore:

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

Bestand met het certificaat kan worden verkregen bij de browser als @magggg suggereert in zijn antwoord .

OPMERKING 1: Mogelijk moet u dit herhalen voor elk certificaat in de keten voor het certificaat van de site. Begin vanaf de root.

OPMERKING 2: <alias_name>MOET UITGEVOERD ZIJN ONDER DE KEYS IN DE STORE of keytoolWORDT EEN FOUT.

Om een ​​lijst met alle certificaten in de winkel te krijgen die u mag uitvoeren:

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

Als er iets misgaat, helpt dit u om het certificaat uit de winkel te verwijderen:

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

Antwoord 5, autoriteit 4%

Ik ben op dit probleem gestuit dat vele uren onderzoek kostte om het op te lossen, vooral met automatisch gegenereerde certificaten, die in tegenstelling tot officiële certificaten behoorlijk lastig zijn en Java daar niet zo dol op is.

Controleer de volgende link: Probleem met certificaten in Java oplossen

In principe moet u het certificaat van de server toevoegen aan de Java Home-certificaten.

  1. Genereer of haal uw certificaat op en configureer Tomcat om het te gebruiken in Servers.xml
  2. Download de Java-broncode van de klasse InstallCerten voer deze uit terwijl de server draait, met de volgende argumenten server[:port]. Er is geen wachtwoord nodig, omdat het originele wachtwoord werkt voor de Java-certificaten (“changeit”).
  3. Het programma maakt verbinding met de server en Java genereert een uitzondering, het analyseert het door de server verstrekte certificaat en stelt u in staat een jssecerts-bestand te maken in de map waar u het programma hebt uitgevoerd ( Als het wordt uitgevoerd vanuit Eclipse, zorg er dan voor dat u de werkmap configureert in Run -> Configurations).
  4. Kopieer dat bestand handmatig naar $JAVA_HOME/jre/lib/security

Na het volgen van deze stappen zullen de verbindingen met het certificaat geen uitzonderingen meer genereren binnen Java.

De volgende broncode is belangrijk en is verdwenen van (Sun) Oracle-blogs, de enige pagina die ik vond was op de verstrekte link, daarom voeg ik deze bij in het antwoord voor eventuele referentie.

/*
 * 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);
        }
    }
}

Antwoord 6, autoriteit 3%

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

Het wordt gebruikt om over de certificaatvalidatie te springen.

Waarschuwing
Alleen gebruiken voor ontwikkelingsdoeleinden, want dit is onveilig!


Antwoord 7, autoriteit 2%

Ik had een iets andere situatie, toen zowel JDK als JRE 1.8.0_112 op mijn systeem aanwezig waren.

Ik heb de nieuwe CA-certificaten geïmporteerd in [JDK_FOLDER]\jre\lib\security\cacertsmet het reeds bekende commando:

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

Toch kreeg ik steeds dezelfde fout PKIX path building failed.

Ik heb foutopsporingsinformatie toegevoegd aan de java CLI met behulp van java -Djavax.net.debug=all ... > debug.log. In het debug.log-bestand is de regel die begint met trustStore:feitelijk verwezen naar de cacerts-winkel die te vinden is in [JRE_FOLDER]\lib\security\cacerts.

In mijn geval was de oplossing om het cacerts-bestand dat door JDK werd gebruikt (waaraan de nieuwe CA’s waren toegevoegd) te kopiëren naar het bestand dat door de JRE werd gebruikt en dat loste het probleem op.


Antwoord 8

Ik wilde een certificaat importeren voor smtp.gmail.com

De enige oplossing die voor mij werkte, is:
1. Voer de opdracht in om dit certificaat te bekijken

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

  1. Kopieer en bewaar de regels tussen “—–BEGIN CERTIFICATE—–” en “—–END CERTIFICATE—–” in een bestand, gmail.cer

  2. Uitvoeren

    keytool -import -alias smtp.gmail.com -keystore
    “%JAVA_HOME%/jre/lib/security/cacerts” -bestand
    C:\Users\Admin\Desktop\gmail.cer

  3. Voer wachtwoord in
    chageit

  4. Klik op ja om het certificaat te importeren

  5. Java opnieuw starten

voer nu het commando uit en je bent klaar om te gaan


Antwoord 9

Achtergrond van het probleem:

Ik kreeg de volgende foutmelding toen ik mvn schone installatie probeerde uit te voeren in mijn project en via de Netbeans IDE clean and build-optie.
Dit probleem is te wijten aan een certificaat dat niet beschikbaar is wanneer we downloaden via NET Beans IDE/via de opdrachtprompt, maar in staat zijn om de bestanden te downloaden via de browser.

Fout:

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  

Oplossing:

1. Download het certificaat van de betreffende URL:

  • Start IE door “uitvoeren als beheerder” (anders kunnen we het certificaat niet downloaden)
  • Voer de url in IE-> https://url/local-repo
    (In mijn geval had deze url een niet-vertrouwd certificaat.)
  • Download het certificaat door te klikken op Certificaatfout -> certificaat bekijken
  • Selecteer het tabblad Details -> kopieer naar bestand -> volgende -> selecteer “DER gecodeerde binaire X.509 (.CER)
  • Sla het certificaat op een bepaalde locatie op, bijvoorbeeld: c:/user/sheldon/desktop/product.cer
  • Gefeliciteerd! je hebt het certificaat voor de site gedownload

2. Installeer nu de sleutelopslag om het probleem op te lossen.

  • Voer de opdracht keytool uit om de gedownloade keystore toe te voegen aan de
    bestaand certificaatbestand.
  • Opdracht: onderstaande opdracht in de bin-map van jdk (JAVA_HOME).

C:\Program Files\Java\jdk1.8.0_141\jre\bin>keytool -importcert -bestand
“C:/user/sheldon/desktop/product.cer” -alias product -keystore
“C:/Program Files/Java/jdk1.8.0_141/jre/lib/security/cacerts”.

  • U wordt gevraagd een wachtwoord in te voeren. Voer keystore-wachtwoord in:
    voer nogmaals “changeit” in voor “Dit certificaat vertrouwen? [no]:”, voer . in
    “ja”

Voorbeeld commandoregel commando’s/uitvoer:

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
  • Gefeliciteerd! nu zou u de fout “PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException” in uw Netbeans IDE moeten hebben verwijderd.

Antwoord 10

Dit is geen Twitter-specifiek antwoord, maar dit is de vraag die naar voren komt als je naar deze fout zoekt. Als uw systeem deze foutmelding krijgt bij het verbinden met een website die een geldig certificaat lijkt te hebben wanneer deze wordt bekeken in een webbrowser, betekent dit waarschijnlijk dat die website een onvolledige certificaatketen heeft.

Voor een korte samenvatting van het probleem: Certificaatautoriteiten gebruiken hun basiscertificaat niet om zomaar een oud certificaat te ondertekenen. In plaats daarvan ondertekenen ze (meestal) tussenliggendecertificaten die ook de vlag van de certificeringsinstantie hebben (dat wil zeggen dat ze certificaten mogen ondertekenen). Wanneer u vervolgens een certificaat van een CA koopt, ondertekenen zij uw CSR met een van deze tussentijdse certificaten.

Uw Java-truststore heeft hoogstwaarschijnlijk alleen de Root Cert, niet de tussenliggende.

Een verkeerd geconfigureerde site kan alleenhun ondertekende certificaat retourneren. Probleem: het is ondertekend met een tussencertificaat dat niet in uw truststore staat. Browsers lossen dit probleem op door een tussencertificaat in de cache te downloaden of te gebruiken; dit maximaliseert de compatibiliteit van de website. Java en tools zoals OpenSSL echter niet. En dat zal de fout in de vraag veroorzaken.

U kunt dit vermoeden verifiëren met behulp van de Qualys SSL-test. Als je dat tegen een site uitvoert en er staat

De certificaatketen van deze server is onvolledig.

dan bevestigt dat het. U kunt dit ook zien door naar de certificeringspaden te kijken en de tekst Extra Downloadte zien.

Hoe dit op te lossen: de serverbeheerder moet de webserver configureren om ook de tussencertificaten te retourneren. Voor Comodo is dit bijvoorbeeld waar het bestand .ca-bundlevan pas komt. In een Apache-configuratie met mod_ssl zou u bijvoorbeeld de configuratie-instelling SSLCertificateChainFilegebruiken. Voor nginx moet u de tussencertificaten en het ondertekende certificaat samenvoegen en gebruiken in de SSL-certificaatconfiguratie. U kunt meer vinden door online te zoeken naar “onvolledige certificaatketen”.


Antwoord 11

De reden dat we bovenstaande foutmelding krijgen, is dat JDK is gebundeld met veel vertrouwde Certificate Authority (CA)-certificaten in een bestand met de naam ‘cacerts’, maar dit bestand heeft geen idee van ons zelfondertekende certificaat. Met andere woorden, het cacerts-bestand heeft ons zelfondertekende certificaat niet geïmporteerd en behandelt het dus niet als een vertrouwde entiteit en geeft daarom de bovenstaande foutmelding.

Hoe om de bovenstaande fout op te lossen

Om de bovenstaande fout op te lossen, hoeven we alleen het zelfondertekende certificaat in het cacerts-bestand te importeren.

Zoek eerst het cacerts-bestand. We zullen de JDK-locatie moeten achterhalen. Als u uw toepassing via een van de IDE’s zoals Eclipse of IntelliJ Idea uitvoert, gaat u naar de projectinstellingen en zoekt u uit wat de JDK-locatie is.
Voor bijvoorbeeld een Mac OS is de typische locatie van het cacerts-bestand op deze locatie /Bibliotheek/Java/JavaVirtualMachines/ {{JDK_version}}/Contents/Home/jre/lib/security
op een Windows-computer zou het onder {{Installation_directory}}/{{JDK_version}}/jre/lib/security

staan

Zodra u het cacerts-bestand hebt gevonden, moeten we nu ons zelfondertekende certificaat naar dit cacerts-bestand importeren. Raadpleeg het laatste artikel als u niet weet hoe u het zelfondertekende certificaat correct kunt genereren.

Als je geen certificaatbestand (.crt) hebt en alleen een .jks-bestand hebt, kun je een .crt-bestand genereren met de onderstaande opdracht. Als je al een .crt/.pem-bestand hebt, kun je onderstaande opdracht negeren

##Om certificaat te genereren uit keystore(.jks-bestand) ####

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

Bovenstaande stap genereert een bestand met de naam selfsigned.crt.Now Importeer het certificaat naar cacerts

Voeg nu het certificaat toe aan JRE/lib/security/cacerts (trustore)

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

voor bijv.

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

Dat is alles, herstart je applicatie en het zou goed moeten werken. Als het nog steeds niet werkt en een SSL-handshake-uitzondering krijgt. Het betekent waarschijnlijk dat je een ander domein gebruikt dan dat je in het certificaat hebt geregistreerd.

De link met gedetailleerde uitleg en stapsgewijze oplossing vindt u hier.


Antwoord 12

Na een halve dag worstelen nog een manier gevonden om dit probleem op te lossen. Ik heb dit kunnen oplossen in MAC 10.15.5 (Catalina). De onderstaande stappen gevolgd.

  • Dit probleem doet zich voor wanneer we achter een bedrijfsproxy werken, in mijn geval Zscaler.
  • Open toegang tot sleutelketen, export CA-certificaat. (Selecteer CA-certificaat, Bestand->export items en sla op met de gewenste naam)
  • Kopieer het pad van bestaande cacerts uit de java-map(/Bibliotheek/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home/jre/lib/security/cacerts
    )
  • Open terminal en navigeer naar de map Keytool (/Bibliotheek/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home/jre/bin
    )
  • Voer de onderstaande opdracht uit.
  • Keytool -importcert – bestand (Pad naar geëxporteerd certificaat vanuit de sleutelhangeraccess) -alias (geef een naam) -keystore (Pad van bestaande cacerts uit de map Java)
  • sudo Keytool -importcert -file /Users/Desktop/RootCA.cer -alias demo -keystore /Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home/jre/lib/security/cacerts
  • Het zal om een wachtwoord vragen, geef het als: changeit
  • Het vraagt om bevestiging, zeg: ja

Na al deze stappen, sluit eclipse af en terminal start een nieuwe sessie.


Antwoord 13

Mac

Het geaccepteerde antwoord werkt niet voor Mac omdat er geen knop Exporterenbeschikbaar is in Mac (Chrome of Firefox). Controleer dit antwoordom het certificaat te downloaden en volg de onderstaande stappen:

  1. Laat alle certificaten zien die in de keystore zijn geïnstalleerd:
cd $JAVA_HOME/jre/lib/security
keytool -list -keystore cacerts

Het standaard wachtwoord van de keystore is: changeit

  1. Maak, voordat u het certificaat in de keystore importeert, een back-up van de keystore:
sudo cp cacerts cacerts.bak
  1. Importeer het gedownloade certificaat in de Keystore :
sudo keytool -importcert -alias youralias -file /path/to/the/downloaded/certificate -keystore cacerts
  1. Controleer of het certificaat in de KeyStore wordt opgeslagen :
sudo keytool -list -keystore cacerts -alias youralias

Als u meer gedetailleerde informatie wilt zien, voegt u de -vVlag toe:

sudo keytool -v -list -keystore cacerts -alias youralias

Antwoord 14

Dit is een oplossing, maar in de vorm van mijn verhaal met dit probleem:

Ik was bijna dood en probeer alle bovenstaande oplossing (gedurende 3 dagen) en niets werkte voor mij.

Ik heb alle hoop verloren.

Ik nam contact op met mijn beveiligingsteam met betrekking tot dit omdat ik achter een proxy zat en ze vertelden dat ze onlangs hun veiligheidsbeleid hadden bijgewerkt.

Ik schold ze slecht voor het niet informeren van de ontwikkelaars.

later hebben ze een nieuw “CaCerts” -bestand uitgegeven dat alle certificaten bevat.

Ik heb het CACERTS-bestand verwijderd dat aanwezig is in% Java_Home% / JRE / LIB / Beveiliging en het heeft mijn probleem opgelost.

Dus als u geconfronteerd wordt met dit probleem, komt het misschien uit uw netwerkteam ook zoals deze.


Antwoord 15

Het toevoegen van cacertsWerkte niet voor mij.
Na het inschakelen van logboeken met vlag -Djavax.net.debug=all, kwam vervolgens leren kennen van JAVA-lezen van jssecacerts.

Importeren op jssecacertsWerkte eindelijk.


Antwoord 16

Ik had hetzelfde probleem en heb het opgelost met de onderstaande eenvoudige stappen:

1) Download de InstallCert.java van google

2) Compileer het met behulp van javac InstallCert.java

3) Voer InstallCert.java uit met behulp van java InstallCert.java, met de hostnaam en https-poort, en druk op “1” wanneer u om invoer vraagt. Het voegt de “localhost” toe als een vertrouwde keystore en genereert een bestand met de naam “jssecacerts” zoals hieronder:

java InstallCert localhost:443

4) kopieer de jssecacerts naar de map $JAVA_HOME/jre/lib/security

De belangrijkste bron om het probleem hier op te lossen is:

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


Antwoord 17

Ik kwam deze vraag tegen toen ik probeerde de Cucumber-Eclipse-plug-in in Eclipse te installeren via hun update-site. Ik heb dezelfde SunCertPathBuilderException-fout ontvangen:

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

Hoewel sommige van de andere antwoorden geschikt en nuttig zijn voor de gegeven situatie van deze vraag, waren ze niettemin nutteloos en misleidend voor mijn probleem.

In mijn geval was het probleem dat de URL voor hun update-site is:

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

Bij het navigeren ernaar via een browser, werd het echter omgeleid naar (let op de toegevoegde “.github“):

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

Dus de oplossing is om gewoon de omgeleide versie van de update-site-URL te gebruiken bij het toevoegen van de update-site in eclipse.


Antwoord 18

Bij mij dook er een certificaatfout op omdat ik fiddler op de achtergrond had draaien en dat verpest het certificaat. Het fungeert als een proxy, zo dichtbij dat en herstart eclipse.


Antwoord 19

Ik heb dit probleem opgelost op Windows Server 2016 met Java 8, door cert te importeren van pkcs12store naar cacertskeystore.

Pad naar pkcs12-winkel:

C:\Apps\pkcs12.pfx

Pad naar Java-cacerts:

C:\Program Files\Java\jre1.8.0_151\lib\security\cacerts

Pad naar keytool:

C:\Program Files\Java\jre1.8.0_151\bin

Na plaatsing in map met keytool in opdrachtprompt (als beheerder), is het commando om cert te importeren van pkcs12naar cacertsals volgt:

keytool -v -importkeystore -srckeystore C:\Apps\pkcs12.pfx -srcstoretype PKCS12 -destkeystore "C:\Program Files\Java\jre1.8.0_151\lib\security\cacerts" -deststoretype JKS

U wordt gevraagd om:
1. voer het keystore-wachtwoord van de bestemming in (cacerts-wachtwoord, standaard is “changeit”)
2. voer het keystore-wachtwoord van de bron in (pkcs12-wachtwoord)

Om wijzigingen door te voeren, start u de servermachine opnieuw op (of start u gewoon JVM opnieuw).


Antwoord 20

doelen:

  1. https-verbindingen gebruiken
  2. verifieer SSL-ketens
  3. niet omgaan met cacerts
  4. certificaat toevoegen in runtime
  5. verlies geen certificaten van cacerts

Hoe het te doen:

  1. definieer eigen keystore
  2. plaats certificaat in keystore
  3. Definieer SSL-standaardcontext opnieuw met onze aangepaste klasse
  4. ???
  5. winst

Mijn Keystore-wrapperbestand:

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

Deze klasse zal indien nodig een sleutelarchief maken en kan certificaten erin beheren. Nu klasse voor SSL-context:

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

Deze klasse gemaakt als Singleton, omdat slechts één defaultssl-context is toegestaan. Dus, nu gebruik:

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

Mogelijk werkt het niet met deze instellingen, omdat ik het certificaatbestand in de bronmap bewaar, dus mijn pad is niet absoluut. Maar over het algemeen werkt het perfect.


Antwoord 21

Als uw repository-URL ook werkt op HTTP en de beveiliging geen probleem is, kunt u naar settings.xmlgaan (vaak, maar niet altijd, in %USERPROFILE%/.m2) en vervang HTTPS door HTTPvoor <repository>en <pluginRepository>URL’s.

Bijvoorbeeld dit:

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

moet worden vervangen door dit:

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

Antwoord 22

Ik gebruikte mijn eigen trust store in plaats van JRE door arg -Djavax.net.ssl.trustStore=

door te geven

Ik kreeg deze fout ongeacht de certificaten in truststore. Het probleem voor mij was de volgorde van de eigenschappen die op de arg-lijn werden doorgegeven.
Wanneer ik -Djavax.net.ssl.trustStore=& -Djavax.net.ssl.trustStorePassword=voor-Dspring.config.location=& -jarargs ik was in staat om met succes mijn rest-oproep aan te roepen via https.


Antwoord 23

Het probleem is dat uw eclips geen verbinding kan maken met de site die hij daadwerkelijk probeert te bereiken.
Ik heb een soortgelijk probleem gehad en de onderstaande oplossing werkte voor mij.

  1. Schakel alle internetbeveiligingstoepassingen van derden uit, b.v. Zscaler
  2. Soms moet je VPN ook loskoppelen als je verbonden bent.

Bedankt


Antwoord 24

Als uw host achter firewall/proxyzit, gebruik dan het volgende commando in cmd:

keytool -J-Dhttps.proxyHost=<proxy_hostname> -J-Dhttps.proxyPort=<proxy_port> -printcert -rfc -sslserver <remote_host_name:remote_ssl_port>

Vervang <proxy_hostname>en <proxy_port>door de HTTP-proxyserver die is geconfigureerd. Vervang <remote_host_name:remote_ssl_port>door een van de externe host (in feite url) en poort met het certificeringsprobleem.

Neem de laatst afgedrukte certificaatinhoud en kopieer deze (ook begin- en eindcertificaat kopiëren). Plak het in het tekstbestand en geef het de extensie .crt. Importeer dit certificaat nu naar cacertsmet het java keytool-commando en het zou moeten werken.

keytool -importcert -file <filename>.crt -alias randomaliasname -keystore %JAVA_HOME%/jre/lib/security/cacerts -storepass changeit

Antwoord 25

Je krijgt deze foutmelding als het certificaat nieuwer is dan je Java-versie. Het gebruik van een nieuwere Java-versie lost dit op.


Antwoord 26

Ik kwam hetzelfde probleem tegen, maar ik update de verkeerde jre op mijn Linux-machine. Het is zeer waarschijnlijk dat Tomcat een andere jre gebruikt en dat uw cli-prompt is geconfigureerd om een andere jre te gebruiken.

Zorg ervoor dat u de juiste jre oppakt.

Stap #1:

ps -ef | grep tomcat

U ziet er iets als:

root     29855     1  3 17:54 pts/3    00:00:42 /usr/java/jdk1.7.0_79/jre/bin/java 

Gebruik dit nu:

keytool -import -alias example -keystore  /usr/java/jdk1.7.0_79/jre/lib/security/cacerts -file cert.cer
PWD: changeit

*. CER-bestand kan worden geniteerd zoals hieronder wordt weergegeven: (of u kunt uw eigen)

gebruiken

openssl x509 -in cert.pem -outform pem -outform der -out cert.cer

Antwoord 27

Als u deze foutmelding nog steeds krijgt

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

Na het uitvoeren van de onderstaande opdracht

keytool -import -alias certificatealias -keystore C:\Program Files\Java\jre1.8.0_151\lib\security\cacerts -file certificate.crt

Dan is er een probleem in JDK. Probeer JDK te installeren van een vertrouwde provider.
Zodra u het opnieuw hebt geïnstalleerd van vertrouwde provider, zult u dit probleem niet onder ogen zien.


Antwoord 28

Normaal gesproken gebeurt dit soort uitzondering wanneer er mismatch is in het pad van het vertrouwde certificaat. Controleer de configuratie of het pad waar dit servercertificaat vereist is voor beveiligde communicatie.


Antwoord 29

Het is een aanvulling op het antwoord https://stackoverflow.com/a/36427118/1491414. Bedankt @MagGGG

  • Zorg ervoor dat u beheerdersrechten heeft
  • Gebruik dubbele aanhalingstekens voor het keystore-pad (-keystore C:\Program Files (x86)\Java\jre1.6.0_22\lib\security\cacerts”) omdat in Windows OS de standaardinstallatielocatie Program Files en u krijgt een foutmelding vanwege de ruimte tussen de programmabestanden.

Antwoord 30

Ik heb dit opgelost met de onderstaande methode-

  1. Kopieer url die verbindingsprobleem heeft
  2. Ga naar Android Studio->Instellingen->Http-instellingen
  3. Plak die url in ‘Verbinding testen’ en druk op ok
  4. Als u op OK klikt, vraagt Android Studio om een certificaat daarvan te importeren
    url, importeer het
  5. Dat is het. Er was niets meer aan te doen en mijn probleem was weg. Niet nodig
    herstart studio ook.

Other episodes