Как мне работать с сертификатами, использующими cURL, при попытке доступа к URL-адресу HTTPS? - PullRequest
168 голосов
/ 01 июля 2010

Я получаю следующую ошибку при использовании curl:

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

Как установить этот сертификат для проверки местоположения?Благодарю.

Ответы [ 22 ]

144 голосов
/ 10 мая 2015

У меня также была установлена ​​новейшая версия ca-Certificates, но ошибка все еще получалась:

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

Проблема заключалась в том, что curl ожидал, что сертификат будет находиться по пути /etc/pki/tls/certs/ca-bundle.crt, но не смог найти его, потому что он был по пути /etc/ssl/certs/ca-certificates.crt.

Копирование моего сертификата в ожидаемый пункт назначения с помощью команды

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

работал на меня. Вам нужно будет создать папки для целевого назначения, если они не существуют, запустив

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

При необходимости измените указанную выше команду, чтобы имя файла назначения совпадало с путем, ожидаемым curl, т.е. замените /etc/pki/tls/certs/ca-bundle.crt на путь, следующий за «CAfile:» в вашем сообщении об ошибке.

79 голосов
/ 25 июня 2015

Поместите это в ваш .bashrc

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

(см. Комментарий от Роберта)

66 голосов
/ 15 ноября 2012

Эта ошибка связана с отсутствующим пакетом : ca-certificates. Установите его.

В Ubuntu Linux (и аналогичных дистрибутивах):

# apt-get install ca-certificates

В CygWin через Apt-Cyg

# apt-cyg install ca-certificates

В Arch Linux (Raspberry Pi)

# pacman -S ca-certificates

В документации сказано:

Этот пакет включает PEM-файлы сертификатов CA, чтобы позволить приложениям на основе SSL проверять подлинность соединений SSL.

Как видно по адресу: Debian - Подробности о пакетных сертификатах в squeeze

28 голосов
/ 15 июля 2015

Создать файл ~/.curlrc со следующим содержанием

cacert=/etc/ssl/certs/ca-certificates.crt
18 голосов
/ 24 июня 2013

Самый быстрый способ обойти ошибку - добавить опцию -k где-то в вашем запросе curl. Эта опция «разрешает соединения с SSL-сайтами без сертификатов». (от curl --help)

Имейте в виду, что это может означать, что вы не разговариваете с конечной точкой, которой, как вы думаете, вы являетесь, поскольку они представляют сертификат, не подписанный центром сертификации, которому вы доверяете.

Например:

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

дал мне следующее сообщение об ошибке:

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

Я добавил на -k:

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

и сообщения об ошибке нет. В качестве бонуса теперь у меня установлен apt-cyg. И CA-сертификаты.

13 голосов
/ 14 июня 2016

@ Роэнс правильно. Это влияет на всех Anaconda пользователей, с ошибкой ниже
curl: (77) error setting certificate verify locations: CAfile: /etc/pki/tls/certs/ca-bundle.crt CApath: none

Обходной путь заключается в использовании системного скручивания по умолчанию и во избежание путаницы с предварительно добавленной переменной Anaconda PATH. Вы можете либо

  1. Переименуйте бинарный файл Anaconda curl:)
    mv /path/to/anaconda/bin/curl /path/to/anaconda/bin/curl_anaconda

  2. ИЛИ удалить Anaconda curl
    conda remove curl

$ which curl /usr/bin/curl

[0] Anaconda Ubuntu curl Github выпуск https://github.com/conda/conda-recipes/issues/352

11 голосов
/ 29 марта 2012

С $ 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.
6 голосов
/ 12 августа 2015

Другой вариант решения этой проблемы - отключение проверки сертификата:

echo insecure >> ~/.curlrc
6 голосов
/ 16 марта 2015

Это сработало для меня

sudo apt-get install ca-certificates

затем перейдите в папку сертификатов на

sudo cd /etc/ssl/certs

затем вы копируете файл ca-reports.crt в /etc/pki/tls/certs

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

если папка tls / certs отсутствует: создайте ее и измените разрешения, используя chmod 777 -R folderNAME

5 голосов
/ 12 марта 2016

Для кода PHP, работающего на XAMPP в Windows, я обнаружил, что мне нужно отредактировать php.ini, чтобы включить ниже

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

, а затем скопируйте в файл https://curl.haxx.se/ca/cacert.pem и переименуйте в curl-ca-bundle.crt и поместите его в путь \ xampp (я не смог заставить работать curl.capath). Я также обнаружил, что CAbundle на сайте cURL недостаточно для удаленного сайта, к которому я подключаюсь, поэтому использовал тот, который указан с предварительно скомпилированной версией Windows curl 7.47.1 в http://winampplugins.co.uk/curl/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...