it-swarm.com.de

Wie gehe ich mit Zertifikaten um, die cURL verwenden, während ich versuche, auf eine HTTPS-URL zuzugreifen?

Ich erhalte den folgenden Fehler bei der Verwendung von Curl:

 curl: (77) Fehler beim Festlegen der Speicherorte für Zertifikate: 
 CAfile: /etc/ssl/certs/ca-certificates.crt
 CApath: none 

Wie lege ich die Speicherorte für die Zertifikatsüberprüfung fest? Vielen Dank.

170
moorecats

Dieser Fehler hängt mit einem fehlenden Paket zusammen: ca-certificates. Es installieren.

In Ubuntu Linux (und ähnlicher Distribution):

# apt-get install ca-certificates

In CygWin über Apt-Cyg

# apt-cyg install ca-certificates

In Arch Linux (Raspberry Pi)

# pacman -S ca-certificates

Die Dokumentation erzählt:

Dieses Paket enthält PEM-Dateien mit CA-Zertifikaten, damit SSL-basierte Anwendungen die Authentizität von SSL-Verbindungen überprüfen können.

Wie zu sehen bei: Debian - Details zu Paket ca-certificates in squeeze

68
Rubens Mariuzzo

Ich hatte auch die neueste Version von CA-Zertifikaten installiert, bekam aber immer noch den Fehler:

curl: (77) error setting certificate verify locations:
  CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none

Das Problem war, dass curl erwartete, dass sich das Zertifikat im Pfad /etc/pki/tls/certs/ca-bundle.crt Befand, es jedoch nicht finden konnte, da es sich im Pfad /etc/ssl/certs/ca-certificates.crt Befand.

Kopieren meines Zertifikats an das erwartete Ziel durch Ausführen

Sudo cp /etc/ssl/certs/ca-certificates.crt /etc/pki/tls/certs/ca-bundle.crt

arbeitete für mich. Sie müssen Ordner für das Ziel erstellen, wenn sie bei der Ausführung nicht vorhanden sind

Sudo mkdir -p /etc/pki/tls/certs

Ändern Sie bei Bedarf den obigen Befehl, damit der Name der Zieldatei mit dem von curl erwarteten Pfad übereinstimmt, d. H. Ersetzen Sie /etc/pki/tls/certs/ca-bundle.crt Durch den Pfad nach "CAfile:" in Ihrer Fehlermeldung.

144
Scott Emmons

Gib das in dein .bashrc

# fix CURL certificates path
export CURL_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt

(siehe Kommentar von Robert)

79

Erstelle eine Datei ~/.curlrc mit folgendem Inhalt

cacert=/etc/ssl/certs/ca-certificates.crt
28
prabeesh

Der schnellste Weg, um den Fehler zu umgehen, ist das Hinzufügen der Option -k an einer beliebigen Stelle in Ihrer Curl-Anfrage. Diese Option "ermöglicht Verbindungen zu SSL-Zitaten ohne Zertifikate." (von curl --help)

Beachten Sie, dass dies möglicherweise bedeutet, dass Sie nicht mit dem Endpunkt sprechen, von dem Sie glauben, dass Sie es sind, da dieser ein Zertifikat vorlegt, das nicht von einer vertrauenswürdigen Zertifizierungsstelle signiert ist.

Beispielsweise:

$ curl -o /usr/bin/apt-cyg https://raw.github.com/cfg/apt-cyg/master/apt-cyg

gab mir die folgende Fehlerantwort:

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

Ich fügte hinzu:

curl -o /usr/bin/apt-cyg https://raw.github.com/cfg/apt-cyg/master/apt-cyg -k

und keine Fehlermeldung. Als Bonus habe ich jetzt apt-cyg installiert. Und Ca-Zertifikate.

18
10gistic

@roens ist richtig. Dies betrifft alle Anaconda Benutzer mit dem folgenden Fehler
curl: (77) error setting certificate verify locations: CAfile: /etc/pki/tls/certs/ca-bundle.crt CApath: none

Die Problemumgehung besteht darin, die Standard-Systemrotation zu verwenden und das Durcheinander mit der vorangestellten Anaconda PATH -Variablen zu vermeiden . Du kannst entweder

  1. Benenne die Anaconda Curl-Binärdatei um :)
    mv /path/to/anaconda/bin/curl /path/to/anaconda/bin/curl_anaconda

  2. [~ # ~] oder [~ # ~] Anaconda Curl entfernen
    conda remove curl

$ which curl /usr/bin/curl

[0] Anaconda Ubuntu Curl Github-Problem https://github.com/conda/conda-recipes/issues/352

13

Von $ man curl:

--cert-type <type>
    (SSL) Tells curl what certificate type the provided  certificate
    is in. PEM, DER and ENG are recognized types.  If not specified,
    PEM is assumed.

    If this option is used several times, the last one will be used.

--cacert <CA certificate>
    (SSL) Tells curl to use the specified certificate file to verify
    the peer. The file may contain  multiple  CA  certificates.  The
    certificate(s)  must be in PEM format. Normally curl is built to
    use a default file for this, so this option is typically used to
    alter that default file.

Das hat bei mir funktioniert

Sudo apt-get install ca-certificates

gehen Sie dann in den Zertifikatsordner unter

Sudo cd /etc/ssl/certs

dann kopierst du die ca-certificates.crt Datei in das /etc/pki/tls/certs

Sudo cp ca-certificates.crt /etc/pki/tls/certs

wenn es keinen tls/certs-Ordner gibt: erstelle einen und ändere die Berechtigungen mit chmod 777 -R folderNAME

6
Kwame Yeboah

Eine andere Alternative, um dieses Problem zu beheben, besteht darin, die Zertifikatüberprüfung zu deaktivieren:

echo insecure >> ~/.curlrc
6
Pablo R. Mier

Für PHP Code, der unter XAMPP unter Windows ausgeführt wird, musste ich die Datei php.ini bearbeiten, um das Folgende einzuschließen

[curl]
; A default value for the CURLOPT_CAINFO option. This is required to be an
; absolute path.
curl.cainfo = curl-ca-bundle.crt

und dann in eine Datei kopieren https://curl.haxx.se/ca/cacert.pem und in curl-ca-bundle.crt umbenennen und unter\xampp path platzieren (ich konnte nicht Holen Sie sich curl.capath zur Arbeit). Ich fand auch, dass das CAbundle auf der cURL-Site nicht genug für die entfernte Site war, zu der ich eine Verbindung herstellte, und verwendete daher eine, die mit einer vorkompilierten Windows-Version von curl 7.47.1 unter http: // winampplugins) aufgeführt ist .co.uk/curl /

5
LJT

Es scheint, dass Ihre Locke auf eine nicht vorhandene Datei mit CA-Zertifikaten oder ähnlichem verweist.

Die Hauptreferenz zu CA-Zertifikaten mit Wellung finden Sie unter: https://curl.haxx.se/docs/sslcerts.html

4
Daniel Stenberg

curl führt standardmäßig eine SSL -Zertifikatsüberprüfung durch, wobei ein "Bündel" von Certificate Authority (CA) öffentlichen Schlüsseln (CA-Zertifikaten) verwendet wird. Das Standardpaket heißt curl-ca-bundle.crt. Sie können eine alternative Datei mit der Option --cacert angeben.

Wenn dieser HTTPS Server ein Zertifikat verwendet, das von einer im Bundle vertretenen Zertifizierungsstelle signiert wurde, ist die Zertifikatüberprüfung wahrscheinlich aufgrund eines Problems mit dem Zertifikat fehlgeschlagen (es ist möglicherweise abgelaufen oder der Name stimmt nicht mit dem Domänennamen in überein) URL).

Wenn Sie die Überprüfung des Zertifikats durch curl deaktivieren möchten, verwenden Sie -k (oder --insecure) Möglichkeit.

beispielsweise

curl --insecure http://........
4
meda

Erstellen Sie einfach die Ordner, die in Ihrem System fehlen.

/ etc/pki/tls/certs /

und erstellen Sie die Datei mit dem folgenden Befehl,

Sudo apt-get installiert ca-Zertifikate

und dann kopieren Sie das Zertifikat und fügen Sie es in den Zielordner ein, der in Ihrem Fehler angezeigt wird. Meiner war "with message 'error setting certificate verify locations: CAfile: /etc/pki/tls/certs/ca-bundle.crt CApath: none' in "Vergewissern Sie sich, dass Sie die Datei genau an der im Fehler angegebenen Stelle einfügen. Verwenden Sie den folgenden Befehl zum Kopieren und Einfügen.

Sudo cp /etc/ssl/certs/ca-certificates.crt /etc/pki/tls/certs/ca-bundle.crt

Fest.

2
Manu R S

Was es wert ist, überprüfen which curl wird ausgeführt ist ebenfalls von Bedeutung.

Ein Benutzer auf einem freigegebenen Computer, den ich verwalte, hat diesen Fehler erhalten. Die Ursache war jedoch, dass sie Anaconda ( http://continuum.io ) installiert hatten. Setzen Sie dabei Anacondas Binärpfad vor den Standard $PATH, und es wird mit einer eigenen curl-Binärdatei geliefert, die Probleme beim Auffinden der Standardzertifikate hatte, die auf diesem Ubuntu-Computer installiert waren .

2
roens

Ich hatte genau das gleiche Problem. Wie sich herausstellt, mein /etc/ssl/certs/ca-certificates.crt Datei war fehlerhaft. Der letzte Eintrag zeigte so etwas:

-----BEGIN CERTIFICATE-----
MIIEDTCCAvWgAwIBAgIJAN..lots of certificate text....AwIBAgIJAN-----END CERTIFICATE-----

Nach dem Hinzufügen einer neuen Zeile vor -----END CERTIFICATE-----, curl konnte die Zertifikatsdatei verarbeiten.

Dies war sehr ärgerlich, da mein update-ca-certificates Befehl gab mir keine Warnung.

Dies kann ein versionsspezifisches Problem von Curl sein oder auch nicht. Aus Gründen der Vollständigkeit ist hier meine Version:

curl --version
# curl 7.51.0 (x86_64-Alpine-linux-musl) libcurl/7.51.0 OpenSSL/1.0.2j zlib/1.2.8 libssh2/1.7.0
# Protocols: dict file ftp ftps Gopher http https imap imaps pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp 
# Features: IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP UnixSockets 
2
ShrimpPhaser

Wenn Sie Homebrew unter MacOS oder Linuxbrew unter Linux verwenden, versuchen Sie, openssl und curl mit den folgenden Schritten von diese Seite neu zu installieren.

Diese Fehlermeldung zeigt an, dass curl mit openssl keine sichere Verbindung herstellen kann. Eine Neuinstallation von openssl sollte das Problem beheben. Führen Sie Folgendes aus, um vorübergehend eine unsichere Verbindung für curl und git zum Herunterladen aller erforderlichen Dateien zu verwenden:

echo insecure >> ~/.curlrc
git config --global http.sslVerify false

Installieren Sie dann openssl und curl oder installieren Sie es erneut:

HOMEBREW_CURLRC=1 brew reinstall openssl curl

Zum Schluss machen Sie die Sicherheitsänderungen rückgängig, damit curl und git wieder sichere Verbindungen verwenden:

sed -i '/^insecure$/d' ~/.curlrc
git config --global http.sslVerify true

Möglicherweise müssen Sie eine neue Shell-Sitzung starten, um das Ergebnis mit zu überprüfen

curl -v https://github.com # or any other https urls.

Wenn die folgende Ausgabe in der Ausgabe angezeigt wird, sollte das Problem behoben sein!

* successfully set certificate verify locations:
*   CAfile: /usr/local/etc/openssl/cert.pem
    CApath: /usr/local/etc/openssl/certs

Verweise:

1
Itachi

Führen Sie den folgenden Befehl in Git Bash aus, der für mich gut funktioniert

git config --global http.sslverify "false"
0
J4cK

Das hat sich für mich geändert:

curl --remote-name --time-cond cacert.pem \
    https://curl.haxx.se/ca/cacert.pem
0
Reza Farshi

Ich hatte dieses Problem und es stellte sich heraus, dass meine Version von CURL DER-codierte Zertifikate nicht analysieren konnte (und auch die Option --cert-type nicht beachtete). Als ich das Zertifikat in das PEM-Format konvertierte, funktionierte es.

0
Joshua Davies

Ich fand diesen Fix einfach und sicher. Es muss lediglich der Pfad zweier Werte in der Datei php.ini Geändert werden. Befolgen Sie die Anweisungen hier: https://ourcodeworld.com/articles/read/196/xampp-wampp-php-ssl-certificate-error-unable-to-get-local-issuer-certificate

0
Will Ward

Im Folgenden werden die Schritte zur Behebung der Probleme beschrieben.
1. Finden Sie heraus, dass die Datei unter der definierten URL vorhanden ist.
2. Wenn nicht, laden Sie die Datei von der URL herunter. https://curl.haxx.se/ca/cacert.pem
3. Kopieren und schädigen Sie die Datei in den definierten Pfad der Datei php.ini.
4. Starten Sie den Apache-Dienst neu.

0
tapas talukder

Der Fehler ist auf beschädigte oder fehlende SSL-Kettenzertifikatsdateien im PKI-Verzeichnis zurückzuführen. Sie müssen sicherstellen, dass die Dateien wie folgt gebündelt sind: In Ihrer Konsole/Ihrem Terminal:

mkdir /usr/src/ca-certificates && cd /usr/src/ca-certificates

Geben Sie diese Site ein: https://rpmfind.net/linux/rpm2html/search.php?query=ca-certificates , holen Sie sich Ihr CA-Zertifikat für SO. Kopieren Sie die URL des Downloads und fügen Sie sie in die URL ein:

rpm2cpio your_url_donwload_ca-ceritificated.rpm | cpio -idmv

starten Sie jetzt Ihren Dienst neu: mein Beispiel dieser Befehl:

Sudo service2 httpd restart
0