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).
Antworten
Zu viele Anzeigen?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:
-
Verwenden Sie cURL mit der Option
-k
, die es curl ermöglicht, unsichere Verbindungen herzustellen, indem cURL das Zertifikat nicht überprüft. -
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.
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.
-
Laden Sie das neueste cacert.pem von https://curl.se/ca/cacert.pem herunter.
-
Fügen Sie die Option '--cacert /Pfad/zum/cacert.pem' dem curl-Befehl hinzu, um curl mitzuteilen, wo sich die lokale Zertifizierungsstelle befindet.
-
(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. -
(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!!!
- (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/).
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.
- See previous answers
- Weitere Antworten anzeigen