Как мне работать с сертификатами с использованием cURL при попытке получить доступ к URL-адресу HTTPS?

Я получаю следующую ошибку с помощью curl:

curl: (77) ошибка установки сертификата проверки местоположения:
  CAfile: /etc/ssl/certs/ca-certificates.crt
  CApath: нет

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

33 ответа

Решение

Эта ошибка связана с отсутствующим пакетом: 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

У меня также была установлена ​​новейшая версия 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:" в вашем сообщении об ошибке.

Поместите это в свой .bashrc

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

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

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

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

Самый быстрый способ обойти ошибку - добавить опцию -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-сертификаты.

От $ 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.

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

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

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

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

$ which curl /usr/bin/curl

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

Если у кого-то все еще возникают проблемы, попробуйте это, у меня это сработало. Удалите файлы в вашем/etc/ssl/certs/ каталог, затем переустановите ca-сертификаты:

sudo apt install ca-certificates --reinstall

Сделал это, когда пытался установить Linuxbrew.

У меня была точно такая же проблема. Как оказалось, мой /etc/ssl/certs/ca-certificates.crt файл был поврежден. Последняя запись показала что-то вроде этого:

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

После добавления новой строки перед -----END CERTIFICATE-----Керл смог обработать файл сертификатов.

Это было очень неприятно узнать, так как мой update-ca-certificates Команда не дала мне никакого предупреждения.

Это может быть, а может и не быть проблемой конкретной версии curl, так что вот моя версия, просто для полноты:

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 

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

echo insecure >> ~/.curlrc

Для кода 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/

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

sudo apt-get install ca-certificates

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

sudo cd /etc/ssl/certs

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

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

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

Керл выполняет SSL проверка сертификата по умолчанию с использованием "связки" Certificate Authority (CA) открытые ключи (CA-сертификаты). Пакет по умолчанию называется curl-ca-bundle.crt; Вы можете указать альтернативный файл, используя опцию --cacert.

Если это HTTPS сервер использует сертификат, подписанный центром сертификации, представленным в комплекте, проверка сертификата, вероятно, не удалась из-за проблемы с сертификатом (срок его действия истек или имя может не совпадать с именем домена в URL-адресе).

Если вы хотите отключить проверку сертификата с помощью curl, используйте -k (или --insecure) вариант.

например

curl --insecure http://........

Кажется, ваш локон указывает на несуществующий файл с сертификатами CA или подобным.

Для получения основной ссылки на сертификаты CA с помощью curl см. https://curl.haxx.se/docs/sslcerts.html

У меня та же проблема: я создаю образ докера на базе alpine, и когда я хочу перейти на веб-сайт моей организации, появляется эта ошибка. Чтобы решить эту проблему, мне нужно получить сертификат CA моей компании, затем я должен добавить его в сертификаты CA моего изображения.

Получите сертификат CA

Используйте OpenSSL для получения сертификатов, связанных с сайтом:

openssl s_client -showcerts -servername my.company.website.org -connect my.company.website.org:443

Это выведет что-то вроде:

CONNECTED(00000005)
depth=2 CN = UbisoftRootCA
verify error:num=19:self signed certificate in certificate chain
...
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
... 
-----END CERTIFICATE-----
...

Получите последний сертификат (содержимое между -----BEGIN CERTIFICATE----- и
-----END CERTIFICATE----- пометки включены) и сохраните его в файл (например, mycompanyRootCA.crt)

Создайте свой образ

Затем, когда вы создадите образ докера из alpine, сделайте следующее:

FROM alpine
RUN apk add ca-certificates curl
COPY mycompanyRootCA.crt  /usr/local/share/ca-certificates/mycompanyRootCA.crt
RUN update-ca-certificates

Ваше изображение теперь будет работать правильно! \o/

Я столкнулся с этой проблемой curl 77, когда пытался получить доступ к elasticsearch, работающему в контейнере докеров на локальном хосте Ubuntu 20.04. Контейнер Afrer был запущен:

  1. Проверить curl без ssl:curl --cacert http_ca.crt -u elastic https://localhost:9200 -kнижний регистр-kза небезопасное соединение.

  2. Проверьте конфиги curl:curl-config --configure, заметил что такое ca-bundle:--with-ca-bundle=/etc/ssl/certs/ca-certificates.crt.

  3. Скопируйте файл http_ca.crt из контейнера в:/usr/local/share/ca-certificates/, исходная команда. здесь .

  4. Запустите обновление ca-сертификатов:sudo update-ca-certificates.

  5. Выполнить завиток:curl -u elastic:<password> https://localhost:9201.
    Наконец получил ответ с"tagline" : "You Know, for Search".

Измените <пароль> на тот, который был сгенерирован при запуске образа Docker.
Также обратите внимание, что на моей машине эластик был запущен на порту 9201 (не знаю, почему: sudo ss -tlpn | grep 9200 ничего не дает мне), я нашел порт с:sudo netstat -ntlpи имя программы было docker-proxy.

Просто создайте папки, которых нет в вашей системе..

/ И т.д. / ИПК / TLS / сертификаты /

и создайте файл, используя следующую команду,

sudo apt-get установить ca-сертификаты

а затем скопируйте и вставьте сертификат в папку назначения, которая отображается в вашей ошибке.. моя была " with message 'error setting certificate verify locations: CAfile: /etc/pki/tls/certs/ca-bundle.crt CApath: none' in "убедитесь, что вы вставили файл в точное место, указанное в сообщении об ошибке. Используйте следующую команду для копирования вставки.

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

Исправлена.

На что стоит, проверяя which curl ведется тоже очень важно.

Пользователь на общедоступном компьютере, который я обслуживаю, получал эту ошибку. Но причина оказалась в том, что они установили Anaconda ( http://continuum.io/). Делая так, поместите двоичный путь Anaconda перед стандартом $PATH и он приходит со своим curl двоичный файл, в котором возникли проблемы с поиском сертификатов по умолчанию, установленных на этом компьютере с Ubuntu.

Для окон: -

  1. Загрузите сертификат с https://curl.se/docs/caextract.html .

  2. Переименуйте cacert.pem в curl-ca-bundle.crt.

  3. Добавьте файл в любое из указанных ниже мест.

Проверьте это для деталей https://curl.se/docs/sslcerts.html

Просто найдите, что это решение идеально подходит для меня.

echo 'cacert=/etc/ssl/certs/ca-certificates.crt' > ~/.curlrc

Я нашел это решение отсюда

Запустите следующую команду в git bash, которая отлично работает для меня

git config --global http.sslverify "false"

Если вы используете homebrew на macOS или linuxbrew в linux, попробуйте переустановить openssl а также curl со следующими шагами с этой страницы.

Это сообщение об ошибке указывает на то, что curl не может установить безопасное соединение с использованием openssl. Переустановка openssl должна решить проблему. Чтобы временно использовать небезопасное соединение для curl и git для загрузки любых необходимых файлов, выполните:

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

Затем установите или переустановите openssl и curl:

HOMEBREW_CURLRC=1 brew reinstall openssl curl

Наконец, отмените изменения безопасности, чтобы curl и git снова использовали безопасные соединения:

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

Возможно, вам придется запустить новый сеанс оболочки, чтобы проверить результат с

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

Если в выводе показывается следующий вывод, проблема должна быть решена!

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

Рекомендации:

У меня была эта проблема, и оказалось, что моя версия CURL не может анализировать закодированные DER сертификаты (и также не обращала внимания на параметр --cert-type). Когда я преобразовал сертификат в формат PEM, он работал.

Я использую MobaXterm, который стажер использует Cygwin, поэтому даже после установки ca-certificates с использованием apt-cyg install ca-certificates проблема не решилась.

Я все еще получал следующую ошибку:

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

Затем я попытался перечислить файл, но не смог его найти. Однако я смог найти все стандартные сертификаты CA, поэтому я скопировал файл /usr/ssl/certs/ca-bundle.crt в виде /etc/ssl/certs/ca-certificates.crt и проблема решена.

Я нашел это исправление простым и безопасным. Это просто предполагает изменение пути двух значений в php.ini файл. Следуйте инструкциям здесь: https://ourcodeworld.com/articles/read/196/xampp-wampp-php-ssl-certificate-error-unable-to-get-local-issuer-certificate

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

Раньше я получал эту ошибку при запуске обновления композитора . Я пробовал все команды для переустановки файла сертификата, но проблема не была решена.

Я понял, что ошибка связана с разрешением. Итак, проблема решилась этой командой.

      cd /etc/ssl

sudo chmod 755 -R certs/

Ниже описываются шаги, чтобы исправить проблемы.
1. Узнайте, что файл существует по определенному URL.
2. Если нет, то загрузите файл с URL. https://curl.haxx.se/ca/cacert.pem
3. Скопируйте и вставьте файл в файл по указанному пути в файле php.ini.
4. Перезапустите сервис Apache.

Это исправлено для меня:

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

Ошибка связана с повреждением или отсутствием файлов сертификата цепочки SSL в каталоге PKI. Вам нужно убедиться, что файлы в комплекте, выполните следующие действия: В вашей консоли / терминале:

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

Войдите на этот сайт: https://rpmfind.net/linux/rpm2html/search.php?query=ca-certificates, получите ваш CA-сертификат для SO. Скопируйте URL-адрес загрузки и вставьте ее в URL: wget your_url_donwload_ca-ceritificated.rpm, установите rtp:

rpm2cpio your_url_donwload_ca-ceritificated.rpm | cpio -idmv

Теперь перезапустите ваш сервис: мой пример этой команды:

sudo service2 httpd restart
Другие вопросы по тегам