Ubuntu 10.04 / CURL: Wie behebe / aktualisiere ich das CA-Bundle?


17

Ich habe kürzlich unseren Server von 8.04 auf 10.04 und die gesamte Software damit aktualisiert.

Nach dem, was ich online gefunden habe, scheint die neue Version von CURL kein CA-Bundle zu enthalten und kann daher nicht überprüfen, ob das Zertifikat des Servers, zu dem Sie eine Verbindung herstellen, von einer gültigen Stelle signiert ist .

Der eigentliche Fehler ist:

CURL-Fehler: Problem mit dem SSL-Zertifikat. Vergewissern Sie sich, dass das CA-Zertifikat in Ordnung ist.
Details: Fehler: 14090086: SSL-Routinen: SSL3_GET_SERVER_CERTIFICATE:
Zertifikatsprüfung fehlgeschlagen 

In einigen Fällen empfehle ich, eine Zertifizierungsstellendatei manuell anzugeben oder die Überprüfung insgesamt zu deaktivieren, indem Sie beim Aufrufen von CURL eine Option festlegen. Ich möchte das Problem jedoch lieber global beheben, anstatt die CURL-Aufrufe der einzelnen Anwendungen ändern zu müssen.

Gibt es eine Möglichkeit, das CA-Problem von CURL serverweit zu beheben, sodass der gesamte vorhandene Anwendungscode unverändert funktioniert, ohne dass Änderungen erforderlich sind?

Antworten:


17

Ich hatte das gleiche Problem und habe nach einigem Stöbern festgestellt, dass Sie ein Paket mit CA-Zertifikaten herunterladen können, die bereit sind, sich auf Ubuntu zu drehen, direkt von der Curl-Entwickler-Site.

cd /etc/ssl/certs
sudo wget http://curl.haxx.se/ca/cacert.pem

Jetzt verwendet curl das aktuellste Bundle und es kann losgehen.


1
danach musste ich updaten mit: update-ca-certificates -f
Grain

9

Hatte ein ähnliches Problem mit Ubuntu 12.04, das curl von der Kommandozeile aus ausführte, um aws-Kommandozeilen-Tools zu erhalten, die in github waren. Ich habe festgestellt, ob ich die Befehlszeile als solche ausgeführt habe:

curl https://raw.github.com/timkay/aws/master/aws -o aws --cacert /etc/ssl/certs/ca-certificates.crt

es würde funktionieren. Der Versuch, die Umgebungsvariable CURL_CA_BUNDLE so festzulegen, dass das Argument "cacert" vermieden werden kann, funktioniert jedoch nicht. Letztendlich schien die Aktualisierung der CA-Zertifikate das Problem zu lösen:

sudo update-ca-certificates

Als Randnotiz habe ich an einer Stelle die Zertifikate von curl.haxx.se aktualisiert, die das Problem nicht behoben haben, aber möglicherweise im Zusammenhang standen. ( sudo wget http://curl.haxx.se/ca/cacert.pemrenne von /etc/ssl/certs).


Link 404 würde für mich. Dies funktioniert: curl.haxx.se/ca/cacert.pem
dave1010

2
Hmm. Scheint zwielichtig, eine Datei mit solchen Zertifikaten nicht über HTTPS abzurufen .
Matthew Schinckel

5

In der Regel verweist Software, die keine eindeutige Implementierung hat und mit OpenSSL kompiliert wurde, auf die systemweite Datei ca-bundle.crt, die sich häufig in befindet /usr/share/ssl/certs .

Der Speicherort kann in Ubuntu unterschiedlich sein, aber das OpenSSL-Paket sollte die ca-bundle-Datei enthalten.

CURL bietet eine Vielzahl von Optionen, mit denen festgelegt werden kann, wie Zertifikate überprüft werden.

  • Die CURL_CA_BUNDLEUmgebungsvariable für den Speicherort der ca-bundle-Datei.
  • --capathHier können Sie das Verzeichnis angeben, in dem sich CA-Zertifikate befinden. (Überschreibt CURL_CA_BUNDLE)
  • --cacert Hier können Sie die CA-Zertifikatdatei angeben.

Auf meinem CentOS-Server kann ich Folgendes ausführen, um den von CURL verwendeten Pfad für das Ca-Bundle zu ermitteln:

$ curl-config --ca
/usr/share/ssl/certs/ca-bundle.crt

1
Open SSL ist installiert. Ich habe eine "ca-certificates.crt" -Datei in / etc / ssl / certs /, die aussieht wie eine Reihe von Zertifikaten, die zusammen verkettet sind, aber ich vermute, CURL sieht es nicht? Hat CURL eine Konfigurationseinstellung für das CA-Bundle?
Nick

Sind Sie sicher, dass es sich nicht um die Art des Zertifikats handelt, das überprüft werden soll? Neuere Zertifikatstechnologien wie Extended Verification-Zertifikate erfordern häufig Ca-Bundle-Updates, da die Stammzertifikate relativ neu sind. Schauen Sie sich auch meine bevorstehende Bearbeitung an.
Warner

curl-config scheint unter Ubuntu kein gültiger Befehl zu sein. Wie setze ich CURL_CA_BUNDLE?
Nick

Es scheint Teil des libcurl3-openssl-devPakets zu sein, das auf einer schnellen Internetsuche basiert. CURL_CA_BUNDLEist nur eine Umgebungsvariable. In der bash CURL_CA_BUNDLE=/path/to/file.
Warner

Okay, das Paket ist installiert, aber "curl-config --ca" erzeugt eine leere Zeile. Ich habe versucht, die Variable mit 'CURL_CA_BUNDLE = "/ etc / ssl / certs / ca-certificates.crt"' zu setzen. Aber "curl-config --ca" erzeugt danach immer noch eine Leerzeile.
Nick
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.