Jak poradzić sobie z certyfikatami używającymi cURL podczas próby uzyskania dostępu do adresu URL HTTPS?

Otrzymuję następujący błąd przy użyciu curl:

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

Jak ustawić ten certyfikat verify locations? Dzięki.

 149
Author: Josh, 2010-07-01

18 answers

Ten błąd jest związany z brakującym pakietem: ca-certificates. Zainstaluj.

W Ubuntu Linux (i podobne distro):

# apt-get install ca-certificates

In CygWin via Apt-Cyg

# apt-cyg install ca-certificates

W Arch Linux (Raspberry Pi)

# pacman -S ca-certificates

Dokumentacja mówi:

Ten pakiet zawiera pliki pem certyfikatów CA, aby umożliwić aplikacjom opartym na SSL sprawdzanie autentyczności połączeń SSL.

Jak widać na stronie: Debian -- szczegóły pakietu ca-certyfikaty w squeeze

 51
Author: Rubens Mariuzzo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-14 18:09:21

Miałem również zainstalowaną najnowszą wersję ca-certificates, ale nadal otrzymywał błąd:

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

Problem polegał na tym, że curl oczekiwał, że certyfikat będzie na ścieżce /etc/pki/tls/certs/ca-bundle.crt, ale nie mógł go znaleźć, ponieważ znajdował się na ścieżce /etc/ssl/certs/ca-certificates.crt.

Kopiowanie certyfikatu do oczekiwanego miejsca docelowego przez uruchomienie

sudo cp /etc/ssl/certs/ca-certificates.crt /etc/pki/tls/certs/ca-bundle.crt
Zadziałało dla mnie. Będziesz musiał utworzyć foldery dla docelowego miejsca docelowego, jeśli nie istnieją, uruchamiając
sudo mkdir -p /etc/pki/tls/certs

W razie potrzeby zmodyfikuj powyższe polecenie aby nazwa pliku docelowego była zgodna ze ścieżką oczekiwaną przez curl, np. zastąp /etc/pki/tls/certs/ca-bundle.crt ścieżką następującą po "CAfile:" w komunikacie o błędzie.

 136
Author: Scott Emmons,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-20 13:53:32

Włóż to do swojego .bashrc

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

(Zobacz komentarz od Roberta)

 72
Author: Yauhen Yakimovich,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-25 20:43:20

Utwórz plik ~/.curlrc o następującej treści

cacert=/etc/ssl/certs/ca-certificates.crt
 27
Author: prabeesh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-17 08:00:01

Najszybszym sposobem obejścia błędu jest dodanie opcji-k gdzieś w żądaniu curl. Ta opcja " umożliwia połączenia z SSL cites bez Cert."(z curl --help)

Należy pamiętać, że może to oznaczać, że nie rozmawiasz z punktem końcowym, za który uważasz, że jesteś, ponieważ prezentują certyfikat nie podpisany przez zaufany urząd certyfikacji.

Na przykład:

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

Dał mi następującą odpowiedź błędu:

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

Dodałem na-k:

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

I żadnego błędu wiadomość. Jako bonus, teraz mam zainstalowany apt-cyg. I certyfikaty ca.

 14
Author: 10gistic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-14 18:15:48

@roens ma rację. Dotyczy to wszystkich użytkowników Anaconda , z poniższym błędem
curl: (77) error setting certificate verify locations: CAfile: /etc/pki/tls/certs/ca-bundle.crt CApath: none

Obejściem jest użycie domyślnego systemowego curl i unikanie mieszania się ze zmienną Anaconda PATH. Możesz albo

  1. Zmień nazwę pliku binarnego Anaconda curl:)
    mv /path/to/anaconda/bin/curl /path/to/anaconda/bin/curl_anaconda

  2. Lub Usuń Anaconda curl
    conda remove curl

$ which curl /usr/bin/curl

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

 10
Author: Harsha Manjunath,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-14 06:56:01

From $ 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.
 8
Author: Puri-iOS Developer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-04 19:54:27

Inną alternatywą do rozwiązania tego problemu jest wyłączenie walidacji certyfikatu:

echo insecure >> ~/.curlrc
 5
Author: Pablo R. Mier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-12 15:31:28

Dla kodu PHP działającego na XAMPP w systemie Windows stwierdziłem, że muszę edytować php.ini to include the below

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

A następnie skopiuj do pliku https://curl.haxx.se/ca/cacert.pem I zmienić nazwę na curl-ca-bundle.crt i umieść go pod ścieżką \xampp (nie mogłem uzyskać curl.capath do pracy). Okazało się również, że CAbundle na stronie cURL nie wystarcza do zdalnej strony, z którą się łączyłem, więc użyłem tego, który jest wymieniony z wstępnie skompilowaną wersją systemu Windows curl 7.47.1 w http://winampplugins.co.uk/curl/

 5
Author: LJT,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-12 10:18:53

Wygląda na to, że Twój curl wskazuje na nieistniejący Plik z certyfikatami CA lub podobnym.

Aby uzyskać podstawowe odniesienie do CERTÓW CA z curl, Zobacz: https://curl.haxx.se/docs/sslcerts.html

 4
Author: Daniel Stenberg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-01 11:57:02

To zadziałało dla mnie

sudo apt-get install ca-certificates

Następnie przejdź do folderu certyfikaty na

sudo cd /etc/ssl/certs

Następnie kopiujesz certyfikaty ca.plik crt do /etc/pki/tls/certs

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

jeśli nie ma folderu TLS/certs: utwórz go i zmień uprawnienia używając chmod 777-r folderNAME

 3
Author: Kwame Yeboah,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-16 13:12:55

Jeśli to coś warte, sprawdzanie which curl jest uruchamiane również jest istotne.

Użytkownik na współdzielonej maszynie, którą utrzymuję, otrzymywał ten błąd. Ale okazało się, że przyczyną było zainstalowanie Anakondy ( http://continuum.io ). w ten sposób umieściliśmy ścieżkę binarną Anacondy przed standardowym $PATH, i jest ona dostarczana z własnym curl binarnym, który miał problemy ze znalezieniem domyślnych Cert, którebyły zainstalowane na tej maszynie Ubuntu.

 2
Author: roens,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-17 19:17:50

Miałem dokładnie ten sam problem. Jak się okazało, mój plik /etc/ssl/certs/ca-certificates.crt był zniekształcony. Ostatni wpis pokazał coś takiego:

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

Po dodaniu nowej linii przed -----END CERTIFICATE-----, curl był w stanie obsłużyć plik certificates.

To było bardzo irytujące, ponieważ moje polecenie update-ca-certificates nie dało mi żadnego ostrzeżenia.

Może to być problem specyficzny dla wersji curl, więc oto moja wersja, tylko dla kompletności:

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
Author: ShrimpPhaser,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-21 13:51:49

Curl domyślnie wykonuje weryfikację certyfikatu SSL, używając " bundle" z Certificate Authority (CA) kluczy publicznych (CA cert). Default pakiet nazywa się curl-ca-bundle.crt; można określić plik alternatywny użycie opcji --cacert.

Jeśli serwer HTTPS używa certyfikatu podpisanego przez CA reprezentowanego w pakietu, weryfikacja certyfikatu prawdopodobnie nie powiodła się z powodu problem z certyfikatem (może wygasnąć lub nazwa może nie pasuje do nazwy domeny w adresie URL).

Jeśli chcesz wyłączyć weryfikację certyfikatu curl, użyj opcja -k (lub --insecure).

Na przykład

curl --insecure http://........
 1
Author: meda,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-21 01:38:26

Uruchom następujące polecenie w git bash, które działa dobrze dla mnie

git config --global http.sslverify "false"
 1
Author: J4cK,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-19 18:25:16

Błąd jest spowodowany uszkodzonymi lub brakującymi plikami certyfikatu łańcucha SSL w katalogu PKI. Musisz upewnić się, że pliki ca-bundle, wykonując następujące kroki: W konsoli / terminalu:

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

Enter this site: https://rpmfind.net/linux/rpm2html/search.php?query=ca-certificates , Zdobądź certyfikat ca, dla SO. Skopiuj adres URL pobierania i wklej w url: wget your_url_donwload_ca-ceritificated.rpm teraz zainstaluj sobie rpm:

rpm2cpio your_url_donwload_ca-ceritificated.rpm | cpio -idmv

Teraz uruchom ponownie usługę: mój przykład to polecenie:

sudo service2 httpd restart
 0
Author: Santos L. Victor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-29 15:46:18

To dla mnie ustalone:

curl --remote-name --time-cond cacert.pem \
    https://curl.haxx.se/ca/cacert.pem
 0
Author: Reza Farshi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-14 09:28:51

Miałem ten sam problem.

To był mój błąd

  error setting ce                                                                     
  rtificate verify locations:
  CAfile: D:/git_repo/mingw32/ssl/certs/ca-bundle.crt
  CApath: none

To działa dobrze dla mnie

Zmieniam nazwę katalogu instalacyjnego git na git_repo ".

 -1
Author: Kanhaiya Kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-14 08:41:29