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?
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:
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:
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.pem
renne von/etc/ssl/certs
).quelle
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.
CURL_CA_BUNDLE
Umgebungsvariable für den Speicherort der ca-bundle-Datei.--capath
Hier können Sie das Verzeichnis angeben, in dem sich CA-Zertifikate befinden. (ÜberschreibtCURL_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:
quelle
libcurl3-openssl-dev
Pakets zu sein, das auf einer schnellen Internetsuche basiert.CURL_CA_BUNDLE
ist nur eine Umgebungsvariable. In der bashCURL_CA_BUNDLE=/path/to/file
.