496 Stimmen

Curl: (60) SSL-Zertifikatsproblem: lokale Herausgeberzertifikat konnte nicht abgerufen werden

root@sclrdev:/home/sclr/certs/FreshCerts# curl --ftp-ssl --verbose ftp://{abc}/ -u trup:trup --cacert /etc/ssl/certs/ca-certificates.crt
* Kurz davor, zu {abc} auf Port 21 zu verbinden (#0)
* Versuche {abc}...
* Verbunden mit {abc} ({abc}) Port 21 (#0)
< 220-Cerberus FTP Server - Home Edition
< 220-Dies ist die UNLIZENZIERTE Home Edition und darf nur für den Privatgebrauch verwendet werden
< 220-Willkommen beim Cerberus FTP Server
< 220 Erstellt von Cerberus, LLC
> AUTH SSL
< 234 Authentifizierungsmethode akzeptiert
* Zertifikatsüberprüfungsstandorte erfolgreich festgelegt:
*   CAfile: /etc/ssl/certs/ca-certificates.crt
  CApath: /etc/ssl/certs
* SSLv3, TLS-Handshake, Client hello (1):
* SSLv3, TLS-Handshake, Server hello (2):
* SSLv3, TLS-Handshake, CERT (11):
* SSLv3, TLS-Alert, Server hello (2):
* SSL-Zertifikatsproblem: kann lokales Herausgebergutachten nicht erhalten
* Verbindung 0 wird geschlossen
curl: (60) SSL-Zertifikatsproblem: kann lokales Herausgebergutachten nicht erhalten
Weitere Details finden Sie hier: http://curl.haxx.se/docs/sslcerts.html

curl führt standardmäßig eine SSL-Zertifikatsüberprüfung durch, indem ein "Bundle"
 von öffentlichen Schlüsseln der Zertifizierungsstelle (CA) (CA-Zertifikate) verwendet wird. Wenn die Standard-Bundle-Datei nicht ausreicht, können Sie eine alternative Datei angeben
 mithilfe der Option --cacert.
Wenn dieser HTTPS-Server ein von einer in
 dem Bundle vertretenen Zertifizierungsstelle signiertes Zertifikat verwendet, ist die Zertifikatsüberprüfung wahrscheinlich fehlgeschlagen aufgrund eines
 Problems mit dem Zertifikat (es könnte abgelaufen sein oder der Name könnte
 nicht mit dem Domainnamen in der URL übereinstimmen).
Wenn Sie die Überprüfung des Zertifikats durch curl ausschalten möchten, verwenden Sie
 die Option -k (oder --insecure).

358voto

Yuvika Punkte 4964

Es scheitert, da cURL nicht in der Lage ist, das vom Server bereitgestellte Zertifikat zu überprüfen.

Es gibt zwei Möglichkeiten, um dies zum Laufen zu bringen:

  1. Verwenden Sie cURL mit der Option -k, die es curl ermöglicht, unsichere Verbindungen herzustellen, indem cURL das Zertifikat nicht überprüft.

  2. Fügen Sie das Stamm-Zertifikat (die CA, die das Serverzertifikat signiert) zu /etc/ssl/certs/ca-certificates.crt hinzu

Sie sollten Option 2 verwenden, da dies die Option ist, die sicherstellt, dass Sie eine Verbindung zu einem sicheren FTP-Server herstellen.

357voto

Dahomz Punkte 3711

Im Zusammenhang mit dem Fehler 'SSL-Zertifikatsproblem: lokales Aussteller-Zertifikat konnte nicht abgerufen werden'. Es ist wichtig zu beachten, dass dies für das System gilt, das die CURL-Anfrage sendet, und NICHT für den Server, der die Anfrage empfängt.

  1. Laden Sie das neueste cacert.pem von https://curl.se/ca/cacert.pem herunter.

  2. Fügen Sie die Option '--cacert /Pfad/zum/cacert.pem' dem curl-Befehl hinzu, um curl mitzuteilen, wo sich die lokale Zertifizierungsstelle befindet.

  3. (oder) Erstellen oder fügen Sie einer '.curlrc'-Datei die Zeile hinzu: cacert = /Pfad/zum/cacert.pem Siehe 'man curl', den Abschnitt über den '-K, --config ' Abschnitt für Informationen darüber, wo curl nach dieser Datei sucht.

  4. (oder wenn Sie php verwenden) Fügen Sie die folgende Zeile zur php.ini hinzu: (Wenn dies ein Shared Hosting ist und Sie keinen Zugriff auf php.ini haben, können Sie dies zu .user.ini in public_html hinzufügen).

curl.cainfo="/Pfad/zum/heruntergeladenen/cacert.pem"

Vergewissern Sie sich, dass Sie den Pfad in doppelte Anführungszeichen setzen!!!

  1. (möglicherweise auch für php) Standardmäßig analysiert der FastCGI-Prozess alle 300 Sekunden neue Dateien (falls erforderlich, können Sie die Häufigkeit ändern, indem Sie ein paar Dateien hinzufügen, wie hier vorgeschlagen https://ss88.uk/blog/fast-cgi-and-user-ini-files-the-new-htaccess/).

108voto

Vijay Bhandari Punkte 1566

Ich habe dieses Problem gelöst, indem ich eine Zeile Code zum cURL-Skript hinzugefügt habe:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

Warnung: Dies macht die Anfrage absolut unsicher (siehe Antwort von @YSU)!

39voto

Maxim Krušina Punkte 659

Für mich hat die einfache Installation von Zertifikaten geholfen:

sudo apt-get install ca-certificates

32voto

Daniel Watrous Punkte 3077

In meinem Fall stellte sich heraus, dass es ein Problem mit der Installation meines Zertifikats auf dem Dienst war, den ich mit cURL konsumieren wollte. Ich habe versäumt, die Zwischen- und Stammzertifikate in mein Domain-Zertifikat zu bündeln/konkatenieren. Anfangs war nicht offensichtlich, dass dies das Problem war, weil Chrome es gelöst hat und das Zertifikat akzeptiert hat, obwohl die Zwischen- und Stammzertifikate fehlten.

Nach dem Bündeln des Zertifikats funktionierte alles wie erwartet. Ich habe es wie folgt gebündelt

$ cat intermediate.crt >> domain.crt

Und wiederholte dies für alle Zwischen- und das Stammzertifikat.

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