386 Stimmen

Java: sun.security.provider.certpath.SunCertPathBuilderException: es konnte kein gültiger Zertifikatspfad zum angeforderten Ziel gefunden werden

Ich habe eine Klasse, die eine Datei von einem https Server herunterlädt. Wenn ich es ausführe, werden viele Fehler zurückgegeben. Es scheint, dass ich ein Problem mit meinem Zertifikat habe. Ist es möglich, die Client-Server-Authentifizierung zu ignorieren? Wenn ja, wie?

package com.da;

import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.CharBuffer;
import java.util.concurrent.Future;

import org.apache.http.HttpResponse;
import org.apache.http.client.utils.URIUtils;
import org.apache.http.impl.nio.client.DefaultHttpAsyncClient;
import org.apache.http.nio.IOControl;
import org.apache.http.nio.client.HttpAsyncClient;
import org.apache.http.nio.client.methods.AsyncCharConsumer;
import org.apache.http.nio.client.methods.HttpAsyncGet;
import org.apache.http.nio.client.methods.HttpAsyncPost;

public class RSDDownloadFile {
    static FileOutputStream fos;

    public void DownloadFile(String URI, String Request) throws Exception
    {
        java.net.URI uri = URIUtils.createURI("https", "176.66.3.69:6443", -1, "download.aspx",
                "Lang=EN&AuthToken=package", null);
        System.out.println("URI-Abfrage: " + uri.toString());

        HttpAsyncClient httpclient = new DefaultHttpAsyncClient();
        httpclient.start();
        try {
            Future future = httpclient.execute(
                    new HttpAsyncGet(uri),
                    new ResponseCallback(), null);

            Boolean result = future.get();
            if (result != null && result.booleanValue()) {
                System.out.println("\nAnforderung erfolgreich ausgeführt");
            } else {
                System.out.println("Anforderung fehlgeschlagen");
            }              
        } 
        catch(Exception e){
            System.out.println("[DownloadFile] Ausnahme: " + e.getMessage());
        }
        finally {
            System.out.println("Herunterfahren");
            httpclient.shutdown();
        }
        System.out.println("Fertig");  

    }

    static class ResponseCallback extends AsyncCharConsumer {

        @Override
        protected void onResponseReceived(final HttpResponse response) {
             System.out.println("Antwort: " + response.getStatusLine());
             System.out.println("Header: " + response.toString());
             try {   
                 //if(response.getStatusLine().getStatusCode()==200)
                     fos = new FileOutputStream( "Response.html" );
             }catch(Exception e){
                 System.out.println("[onResponseReceived] Ausnahme: " + e.getMessage());
             }
        }

        @Override
        protected void onCharReceived(final CharBuffer buf, final IOControl ioctrl) throws IOException {
            try
            {
                while (buf.hasRemaining()) 
                {
                    //System.out.print(buf.get());
                    fos.write(buf.get());
                }
            }catch(Exception e)
            {
                System.out.println("[onCharReceived] Ausnahme: " + e.getMessage());
            }
        }

        @Override
        protected void onCleanup() {
            try
            {             
                if(fos!=null)
                    fos.close();
            }catch(Exception e){
                System.out.println("[onCleanup] Ausnahme: " + e.getMessage());         
            }
             System.out.println("onCleanup()");
        }

        @Override
        protected Boolean buildResult() {
            return Boolean.TRUE;
        }

    }
}

Fehler:

URI-Abfrage: https://176.66.3.69:6443/download.aspx?Lang=EN&AuthToken=package
Aug 2, 2011 3:47:57 PM org.apache.http.impl.nio.client.NHttpClientProtocolHandler exception
SEVERE: I/O-Fehler: Allgemeines SSLEngine-Problem
javax.net.ssl.SSLHandshakeException: Allgemeines SSLEngine-Problem
    at com.sun.net.ssl.internal.ssl.Handshaker.checkThrown(Unknown Source)
    at com.sun.net.ssl.internal.ssl.SSLEngineImpl.checkTaskThrown(Unknown Source)
    at com.sun.net.ssl.internal.ssl.SSLEngineImpl.writeAppRecord(Unknown Source)
    at com.sun.net.ssl.internal.ssl.SSLEngineImpl.wrap(Unknown Source)
    at javax.net.ssl.SSLEngine.wrap(Unknown Source)
    at org.apache.http.impl.nio.reactor.SSLIOSession.doHandshake(SSLIOSession.java:154)
    at org.apache.http.impl.nio.reactor.SSLIOSession.isAppInputReady(SSLIOSession.java:276)
    at org.apache.http.impl.nio.client.InternalClientEventDispatch.inputReady(InternalClientEventDispatch.java:79)
    at org.apache.http.impl.nio.reactor.BaseIOReactor.readable(BaseIOReactor.java:161)
    at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvent(AbstractIOReactor.java:335)
    at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvents(AbstractIOReactor.java:315)
    at org.apache.http.impl.nio.reactor.AbstractIOReactor.execute(AbstractIOReactor.java:275)
    at org.apache.http.impl.nio.reactor.BaseIOReactor.execute(BaseIOReactor.java:104)
    at org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor$Worker.run(AbstractMultiworkerIOReactor.java:542)
    at java.lang.Thread.run(Unknown Source)
Verursacht durch: javax.net.ssl.SSLHandshakeException: Allgemeines SSLEngine-Problem
    at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Unknown Source)
    at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Unknown Source)
    at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(Unknown Source)
    at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(Unknown Source)
    at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Unknown Source)
    at com.sun.net.ssl.internal.ssl.Handshaker$DelegatedTask.run(Unknown Source)
    at org.apache.http.impl.nio.reactor.SSLIOSession.doHandshake(SSLIOSession.java:180)
    ... 9 more
Verursacht durch: 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)
    ... 21 more
onCleanup()

[DownloadFile] Ausnahme: javax.net.ssl.SSLHandshakeException: Allgemeines SSLEngine-Problem
Herunterfahren
Fertig

5 Stimmen

Einmal habe ich diesen Fehler bekommen und unser Sicherheitsteam kontaktiert, und es stellte sich heraus, dass ich das JAR patchen musste, das wir verwendet haben, da unser Team ein veraltetes von der Firma bereitgestelltes benutzte. Nur als Information für alle anderen, die sich in einer ähnlichen Situation befinden könnten.

0 Stimmen

Ich habe dieses PKIX-Problem in zwei Fällen erhalten, beim Herunterladen der Maven-Abhängigkeit direkt aus dem Internet anstelle des Caches meiner Organisation. Dies wurde durch die Korrektur der setting.xml-Datei behoben. Das zweite Mal hatte ich dieses Problem, als ich versuchte, auf Microsoft URI für oAuth-Token zuzugreifen. Dies wurde durch Hinzufügen der cacert-Datei in meinen JDK-Pfad behoben.

3voto

StaticNoiseLog Punkte 1301

UPDATE: Dass ein Neustart geholfen hat, war zufällig (ich hatte gehofft, hurra!). Die eigentliche Ursache des Problems war folgende: Wenn Gradle angewiesen wird, einen bestimmten Keystore zu verwenden, muss dieser Keystore auch alle offiziellen Stammzertifikate enthalten. Andernfalls kann er nicht auf Bibliotheken aus regulären Repositories zugreifen. Was ich tun musste, war folgendes:

Das selbstsignierte Zertifikat importieren:

keytool -import -trustcacerts -alias myselfsignedcert -file /Users/me/Desktop/selfsignedcert.crt -keystore ./privateKeystore.jks

Die offiziellen Stammzertifikate hinzufügen:

keytool -importkeystore -srckeystore /lib/security/cacerts -destkeystore ./privateKeystore.jks

Vielleicht hat auch der Gradle-Daemon im Weg gestanden. Es könnte sich lohnen, alle laufenden Daemons mit ./gradlew --status zu beenden, wenn die Dinge düster aussehen.

ORIGINALER BEITRAG:

Niemand wird das glauben, das weiß ich. Trotzdem, wenn nichts anderes funktioniert, versuch es einfach: Nach einem Neustart meines Macs war das Problem verschwunden. Grrr.

Hintergrund: ./gradlew jar hat mir immer "unable to find valid certification path to requested target" zurückgegeben

Ich steckte fest mit einem selbstsignierten Zertifikat, das aus dem Browser gespeichert und in privateKeystore.jks importiert wurde. Dann habe ich Gradle angewiesen, mit privateKeystore.jks zu arbeiten:

org.gradle.jvmargs=-Djavax.net.debug=SSL -Djavax.net.ssl.trustStore="/Users/me/IntelliJ/myproject/privateKeystore.jks"  -Djavax.net.ssl.trustStorePassword=changeit

Wie erwähnt hat das nur nach einem Neustart funktioniert.

2voto

Amit Meena Punkte 1400

Und wenn Sie hier im Jahr 2022 sind und einen Mac verwenden, befolgen Sie diese Anweisungen

1. Zertifikat herunterladen.

echo -n | openssl s_client -connect : -servername  \
    | openssl x509 > /tmp/.cert

2. Suchen Sie Ihren JDK-Pfad, indem Sie den Befehl ausführen.

/usr/libexec/java_home

3. Importieren Sie das Zertifikat jetzt in den Zertifikatspeicher von JDK.

sudo keytool -import -alias mycertificate -keystore "/lib/security/cacerts" -file /tmp/.cert

2voto

raikumardipak Punkte 1215
  Laden Sie das Zertifikat aus dem Nexus3-Browser herunter (klicken Sie auf das Sperrschloss für Informationen zur Website anzeigen, wenn Sie den Edge-Browser verwenden)
Klicken Sie auf Verbindung ist sicher
Klicken Sie auf Zertifikatdetails
Klicken Sie auf Datei kopieren (Es öffnet sich der Assistent zum Exportieren des Zertifikats)
Wählen Sie die Base-64-Codierung
Durchsuchen Sie und wählen Sie einen Download-Speicherort und Dateinamen aus (sagen wir mycert)
Öffnen Sie cmd
Gehen Sie zum Download-Speicherort und führen Sie den folgenden Befehl aus
keytool -import -alias mycert -keystore "<>\jre\lib\security\cacerts" -file mycert.cer
Starten Sie die Maschine neu
Führen Sie erneut den Maven-Build aus.

2voto

Insoft Punkte 548

AVG Version 18.1.3044 (mit Windows 10) stört meine lokale Spring-Anwendung.

Lösung: Gehen Sie in den AVG-Bereich mit dem Namen "Web und E-Mail" und deaktivieren Sie den "E-Mail-Schutz". AVG blockiert das Zertifikat, wenn die Website nicht sicher ist.

2voto

Brad Parks Punkte 59613

Dies kann auch durch die Verwendung von GoDaddy-Zertifikaten mit Java 7 verursacht werden, die mit SHA2 signiert sind.

Chrome und alle anderen Browser beginnen, SSL-Zertifikate zu veralten, die mit SHA1 signiert sind, da sie nicht so sicher sind.

Weitere Informationen zu dem Problem finden Sie hier, sowie wie es auf Ihrem Server gelöst werden kann, wenn Sie es jetzt benötigen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X