So beheben Sie das Auslösen von Curls „Fehler beim Festlegen von Zertifikatsüberprüfungsstandorten“

Ich bin Webentwickler und habe ein MacBook4,1 mit OS X 10.5.8. Wichtige Dinge wie GitHub, Homebrew, Ruby und Python funktionieren nicht richtig, weil Curl nicht funktioniert. Es scheint, dass die SSL-Zertifikate veraltet sind.

Ich bekomme jedes Mal diesen Fehler:

curl: (77) error setting certificate verify locations:
  CAfile: /usr/share/curl/curl-ca-bundle.crt
  CApath: none

Was kann ich tun, um das zu beheben?

Ich frage mich, warum die Mitarbeiter in Ihrem lokalen Apple Store Ihnen nicht helfen werden. Was genau war ihre Antwort, als Sie das Problem angesprochen haben curl?
Das habe ich mich auch gewundert, denn bis jetzt war ich mit den Apple-Diensten sehr zufrieden. Ich habe das Curl-Problem nicht direkt angesprochen. Ich habe nur gefragt, ob es eine Möglichkeit gibt, mein Betriebssystem auf 10.6 zu aktualisieren.
Sie erwähnen nicht, woher Sie kommen, aber 10.6 ist immer noch im US Store verfügbar.
Ich komme aus Deutschland und 10.6 ist hier nicht verfügbar :(
Zögern Sie nicht, eine neue Frage zu stellen, wie Sie in Deutschland ein 10.6-Upgrade erhalten . Ich werde diese Frage hier bearbeiten, um mich auf das Curl-Problem zu konzentrieren.

Antworten (2)

Dieser Fehler sagt nicht ausdrücklich, dass die Zertifikate veraltet sind, oder? Es sieht für mich so aus, als würde es sich beschweren, dass die Zertifikate nicht dort sind, wo sie sein sollen (oder möglicherweise nicht gelesen werden können).

Habe das bei google gefunden:

http://curl.haxx.se/mail/curlphp-2005-11/0038.html

Zusammenfassend schlägt das Poster vor, entweder das Flag -k mit curl zu verwenden, um diesen Fehler zu unterdrücken (dies ist offensichtlich weniger sicher), oder sicherzustellen, dass der Prozess, der curl aufruft, Ausführungszugriff auf alle Verzeichnisse auf dem Pfad zu den Zertifikaten hat.

Das Problem entsteht, weil OS X seine CA-Zertifikate nicht im Dateisystem aufbewahrt; Sie leben im "System Roots"-Schlüsselbund. Sie können sie mit der App "Schlüsselbundverwaltung" (in Ihrem Ordner "Programme/Dienstprogramme") anzeigen.

Für die Tools, die nicht mit dem Schlüsselbund sprechen können (wie curl), können Sie diese Zertifikate in einen Ordner Ihrer Wahl exportieren, um beispielsweise /etc/ssl/certsmit den meisten Linux-Distributionen konsistent zu sein. Sie können sie entweder aus der Schlüsselbundverwaltung in ein Finder-Fenster ziehen und dort ablegen oder sie auswählen und im Dateimenü „Elemente exportieren...“ wählen. Bei Drag & Drop scheint es immer das Binärformat zu verwenden .cer, während die meisten CLI-Tools base64-codiertes PEM (üblicherweise mit der .crtDateierweiterung) wünschen. Sie können im PEM-Format aus dem Schlüsselbundzugriff exportieren, aber es scheint nur jeweils ein Zertifikat zu exportieren, selbst wenn Sie mehrere Zertifikate ausgewählt haben. Um dies zu umgehen, habe ich ein Bash-Skript geschrieben, um .cer in .crt-Dateien im PEM-Format zu konvertieren:

#!/bin/bash
#Convert all .cer files in this folder into PEM format .crt files
shopt -s nullglob
for f in *.cer
do
        openssl x509 -inform der -in "${f}" -outform pem -out "${f%.*}.crt"
        rm "$f"
done
chmod 444 *crt

Um es zu verwenden, erstellen Sie einen Ordner, legen Sie dieses Skript darin ab (ich nannte es cerconv.sh), ziehen Sie alle Ihre Root-CA-Zertifikate hinein, öffnen Sie ein Terminal in diesem Ordner und führen Sie einfach bash cerconv.sh.

Um zu vermeiden, dass schändliche Dinge Ihre CA-Zertifikate austauschen, habe ich ihnen chmodallen eine Zeile als schreibgeschützt hinzugefügt.

Das mag alles unnötig sein - ich habe sicherlich keine Probleme mit Git (Hub), Homebrew, Curl usw., ohne dies tun zu müssen, und das seit Jahren - aber zumindest wissen Sie jetzt, wie Sie die Zertifikate erhalten.

Dieser Ansatz ist besser als die Verwendung von -kin curl, da Sie Ihre Sicherheit nicht gefährden.

Update : Ich habe gerade das securityDienstprogramm unter OS X entdeckt. Hier ist ein Befehl, der es verwendet, um alle Zertifikate aus Ihrem Systemschlüsselbund in eine einzige .pem-Datei zu exportieren, die mit curl verwendet werden sollte:

security export -p -t certs -k `security list-keychains -d system|cut -d '"' -f 2` -o certs/certs.pem
Das hat bei mir funktioniert, nur das Konvertieren meines CA-Zertifikats von cer in pem hat das Problem gelöst, ich habe es einfach so konvertiert: openssl x509 -inform der -in rootCA.cer -outform pem -out rootCA.pem