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

23voto

Nach der Installation von Git Extensions v3.48 trat dieses Problem auf. Ich habe versucht, mysysgit erneut zu installieren, aber das gleiche Problem ist aufgetreten. Am Ende musste ich (bitte beachten Sie die Sicherheitsimplikationen!) die Git SSL-Verifizierung deaktivieren mit:

git config --global http.sslVerify false

aber wenn Sie ein Domain-Zertifikat haben, ist es besser, es hinzuzufügen (Win7)

C:\Program Files (x86)\Git\bin\curl-ca-bundle.crt

21voto

Jason Pyeron Punkte 2218

Es handelt sich höchstwahrscheinlich um ein fehlendes Zertifikat vom Server.

Root->Zwischen->Server

Ein Server sollte mindestens das Server- und Zwischenzertifikat senden.

Verwenden Sie openssl s_client -showcerts -starttls ftp -crlf -connect abc:21, um das Problem zu debuggen.

Wenn nur ein Zertifikat zurückgegeben wird (entweder selbst signiert oder ausgestellt), müssen Sie entweder:

  1. den Server reparieren lassen
  2. diesem Zertifikat vertrauen und es Ihrem CA-Zertifikatsspeicher hinzufügen (nicht die beste Idee)
  3. das Vertrauen deaktivieren, z. B. curl -k (sehr schlechte Idee)

Wenn der Server mehr als eines, aber nicht einschließlich eines selbst signierten (Root) Zertifikats zurückgibt:

  1. installieren Sie das CA (Root) Zertifikat in Ihren CA-Speicher für diese Kette, z. B. suchen Sie nach dem Aussteller. (NUR wenn Sie diesem CA vertrauen)
  2. den Server reparieren lassen, um das CA als Teil der Kette zu senden
  3. einem Zertifikat in der Kette vertrauen
  4. das Vertrauen deaktivieren

Wenn der Server ein Root-CA-Zertifikat zurückgegeben hat, das nicht in Ihrem CA-Speicher ist, sind Ihre Optionen:

  1. Hinzufügen (Vertrauen) davon
  2. das Vertrauen deaktivieren

Ich habe abgelaufene / widerrufene Zertifikate ignoriert, weil keine Meldungen darauf hinwiesen. Aber Sie können die Zertifikate mit openssl x509 -text überprüfen.

Anhand der Verbindung zu einem Home-Edition (https://www.cerberusftp.com/support/help/installing-a-certificate/) ftp-Server gehe ich davon aus, dass es selbst signiert ist.

Bitte posten Sie weitere Details, wie die Ausgabe von openssl.

16voto

gp-coder Punkte 1050

Wir sind kürzlich auf diesen Fehler gestoßen. Es stellte sich heraus, dass er mit dem nicht ordnungsgemäß installierten Stammzertifikat im CA-Speicherverzeichnis zusammenhängt. Ich habe einen curl-Befehl verwendet, in dem ich das CA-Verzeichnis direkt angegeben habe. curl --cacert /etc/test/server.pem --capath /etc/test ... Dieser Befehl ist jedes Mal mit curl: (60) SSL-Zertifikatsproblem: lokales Ausstellerzertifikat konnte nicht erhalten werden. fehlgeschlagen.

Nach Verwendung von strace curl ... wurde festgestellt, dass curl nach der Stammzertifikatsdatei mit dem Namen 60ff2731.0 suchte, der auf einer OpenSSL-Hash-Namenskonvention basiert. Also habe ich diesen Befehl gefunden, um das Stammzertifikat ordnungsgemäß zu importieren:

ln -s rootcert.pem `openssl x509 -hash -noout -in rootcert.pem`.0

was eine symbolische Verknüpfung erstellt

60ff2731.0 -> rootcert.pem

Curl hat unter der Oberfläche das server.pem-Zertifikat gelesen, den Namen der Stammzertifikatsdatei (rootcert.pem) ermittelt, ihn in seinen Hash-Namen umgewandelt, dann eine OS-Dateisuche durchgeführt, aber konnte es nicht finden.

Also, das Fazit ist, verwenden Sie strace, wenn Sie curl ausführen, wenn der curl-Fehler unklar ist (es war eine enorme Hilfe), und stellen Sie sicher, dass Sie das Stammzertifikat ordnungsgemäß mit der OpenSSL-Namenskonvention installieren.

14voto

Michael P. Bazos Punkte 23805

Es reicht möglicherweise aus, nur die Liste der Zertifikate zu aktualisieren

sudo update-ca-certificates -f

update-ca-certificates ist ein Programm, das das Verzeichnis /etc/ssl/certs aktualisiert, um SSL-Zertifikate zu speichern und ca-certificates.crt zu generieren, eine zusammengefügte Datei mit Zertifikaten.

12voto

Enes Kirimi Punkte 460

Ich habe dieses Problem auch schon erlebt. Ich habe diesen Thread gelesen und die meisten Antworten sind informativ, aber für mich zu komplex. Ich bin nicht erfahren in Netzwerkthemen, deshalb ist diese Antwort für Leute wie mich.

In meinem Fall trat dieser Fehler auf, weil ich die Zwischen- und Stammzertifikate nicht neben dem Zertifikat, das ich in meiner Anwendung verwendet habe, eingeschlossen habe.

Hier ist, was ich vom SSL-Zertifikatslieferanten erhalten habe:

- abc.crt
- abc.pem
- abc-bunde.crt

In der abc.crt Datei gab es nur ein Zertifikat:

-----BEGIN CERTIFICATE-----
/*Zertifikatsinhalt hier*/
-----END CERTIFICATE-----

Wenn ich es in diesem Format bereitstelle, würde der Browser keine Fehler anzeigen (Firefox), aber ich würde den Fehler curl: (60) SSL-Zertifikat : kann lokales Ausstellerzertifikat nicht erhalten bekommen, wenn ich die Curl-Anfrage gemacht habe.

Um diesen Fehler zu beheben, überprüfen Sie die Datei abc-bunde.crt. Sie werden höchstwahrscheinlich etwas Ähnliches wie dies sehen:

-----BEGIN CERTIFICATE-----
/*zusätzlicher Zertifikatsinhalt hier*/
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
/*anderer Zertifikatsinhalt hier*/
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
/*unterschiedlicher Zertifikatsinhalt hier*/
-----END CERTIFICATE-----

Dies sind Ihre Zwischen- und Stammzertifikate. Der Fehler tritt auf, weil sie im SSL-Zertifikat fehlen, das Sie Ihrer Anwendung zur Verfügung stellen.

Um den Fehler zu beheben, kombinieren Sie die Inhalte beider Dateien in diesem Format:

-----BEGIN CERTIFICATE-----
/*Zertifikatsinhalt hier*/
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
/*zusätzlicher Zertifikatsinhalt hier*/
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
/*anderer Zertifikatsinhalt hier*/
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
/*unterschiedlicher Zertifikatsinhalt hier*/
-----END CERTIFICATE-----

Beachten Sie, dass es keine Leerzeichen zwischen Zertifikaten gibt, am Ende oder am Anfang der Datei. Sobald Sie dieses kombinierte Zertifikat Ihrer Anwendung bereitstellen, sollte Ihr Problem behoben sein.

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