Da das Mavericks-Upgrade Curl mehr Probleme mit Zertifikaten hat.
Beim Versuch, eine Datei von meinem Webserver mit ihrem selbstsignierten Zertifikat zu locken, wurde der Fehler "SSL-Zertifikat: Ungültige Zertifikatkette" angezeigt.
Dies wurde korrigiert, indem das Zertifikat meinem Systemschlüsselbund hinzugefügt und so eingestellt wurde, dass immer SSL zulässig ist. Informationen, die ich hier und hier gefunden habe .
Dies funktioniert gut und wenn ich eine Datei locke, wird sie ordnungsgemäß heruntergeladen.
Wenn ich jedoch zuvor Curl mit sudo ausführe (z. B. habe ich ein Skript, das mit sudo ausgeführt werden muss und darin ein Curl ausführt), kehre ich zur gleichen Fehlermeldung zurück.
Ich vermute, dass root vielleicht nicht aus dem Systemschlüsselbund liest?
Kennt jemand einen Weg, dies zu beheben?
root
-verfügbaren.curlrc
anstelle von--insecure
. Genau so heißt es - für einen Angreifer in der Netzwerkposition wäre es für MITM trivial, Code einzufügen.Root liest nicht aus den aktuellen Benutzervertrauenseinstellungen, es gibt jedoch sowohl Administratorvertrauenseinstellungen als auch rootbenutzerspezifische Vertrauenseinstellungen. (Diese unterscheiden sich auch von den Systemvertrauenseinstellungen .) Beachten Sie auch, dass sich die Einstellungen für die Zertifikatvertrauensstellung etwas vom Hinzufügen eines Zertifikats zu einem Schlüsselbund unterscheiden. Sie können ein Zertifikat als vertrauenswürdig markieren, ohne es vollständig hinzuzufügen. (Die genaue Situation hier ist mir nicht klar, und die Dokumente, die ich gesehen habe, sind vage.)
Sie können ein Zertifikat für Ihren aktuellen Benutzer als vertrauenswürdig markieren
aber das hilft nicht bei root. Die Lösung ist, wie Sie jetzt vielleicht erraten, entweder
sudo
die oben genannte, die es dann als vertrauenswürdig für den Root-Benutzer markiert:oder um das
-d
Flag zu verwenden, um es zu den Administrator-Vertrauenseinstellungen hinzuzufügen:(OS X öffnet einen Passwortdialog, um diesen zu bestätigen.)
Beides scheint für beide ausreichend zu sein
sudo curl
.Referenz: https://developer.apple.com/library/mac/Documentation/Darwin/Reference/ManPages/man1/security.1.html
quelle
Das steht wirklich im Ausgabehinweis:
Der Vorteil der Verwendung der oben genannten Lösung besteht darin, dass sie für alle
curl
Befehle funktioniert. Sie wird jedoch nicht empfohlen, da sie MITM-Angriffe verursachen kann, indem eine Verbindung zu unsicheren und nicht vertrauenswürdigen Hosts hergestellt wird.quelle
Wenn Sie MacPorts verwenden (und das von Ihnen erwähnte Skript eines Drittanbieters es nicht entfernt
$PATH
oder aufruft/usr/bin/curl
), können Sie die Portscertsync
undcurl
in dieser Reihenfolge installieren .certsync
ist ein Tool und eine entsprechende Startliste, die Ihren Systemschlüsselbund in$prefix/etc/openssl/cert.pem
einen Symlink exportiert und diesen installiert,$prefix/share/curl/curl-ca-bundle.crt -> $prefix/etc/openssl/cert.pem
damit MacPorts Curl die Zertifikate automatisch abruft.certsync
aktualisiert die generierten Dateien auch automatisch, wenn Sie Ihren Systemschlüsselbund ändern.quelle
Die Dokumentation, die Sie suchen, finden Sie hier. Es wird erklärt, wie Sie cURL auf Mavericks verwenden und wie Sie Ihre Zertifikate bereitstellen: http://curl.haxx.se/mail/archive-2013-10/0036.html
quelle
Damit dies
sudo curl
funktioniert (unter OSX Sierra), mussten wir das Zertifikat in das importierenSystem.keychain
und dort vertrauen. Dies kann manuell in der Schlüsselbund-App oder mit diesem Befehl erfolgen:Es war wichtig,
-d
den Pfad zum Systemschlüsselbund über anzugeben und manuell festzulegen-k
, um sicherzustellen, dass das Zertifikat tatsächlich dort importiert wird, wenn es noch nicht vorhanden ist.Der Befehl funktioniert ohne
sudo
, fragt dann aber über ein UI-Dialogfeld nach dem Kennwort, was eine Hürde für Skripte sein könnte.quelle
SecCertificateCreateFromData: Unknown format in import.