Как работать с сертификатами с помощью cURL при попытке доступа к url HTTPS?
Я получаю следующую ошибку, используя https://over.wiki/curl/" class="blnk">curl:
curl: (77) error setting certificate verify locations: CAfile: /etc/ssl/certs/ca-certificates.crt CApath: none
Как установить этот сертификат проверить местоположения? Спасибо.
18 ответов
эта ошибка связана с отсутствует пакет: ca-certificates
. Установить его.
в Ubuntu Linux (и подобных дистрибутивов):
# apt-get install ca-certificates
в CygWin через Апт-Системы Cyg
# apt-cyg install ca-certificates
В Arch Linux (Raspberry Pi)
# pacman -S ca-certificates
документация говорит:
этот пакет включает PEM-файлы сертификатов CA, чтобы приложения на основе SSL могли проверять подлинность SSL подключение.
в: Debian -- подробная информация о пакете ca-certificates в squeeze
у меня также была установлена новейшая версия ca-сертификатов, но все еще получала ошибку:
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
работал для меня. Вам понадобится создать папки для целевого назначения, если они не существуют бег!--7-->
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
(см. комментарий Роберта)
самый быстрый способ обойти ошибку-добавить опцию-k где-нибудь в вашем запросе curl. Эта опция " позволяет подключаться к SSL-сайтам без сертификатов.(от керла-помогите)
имейте в виду, что это может означать, что вы не разговариваете с конечной точкой, о которой думаете, поскольку они представляют сертификат, не подписанный CA, которому Вы доверяете.
например:
$ 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
я добавил на -к:
curl -o /usr/bin/apt-cyg https://raw.github.com/cfg/apt-cyg/master/apt-cyg -k
и нет сообщения об ошибке. В качестве бонуса, теперь у меня установлен apt-cyg. И CA-сертификаты.
@роэнс является правильным. Это касается всех Анаконда пользователи, с ниже ошибкаcurl: (77) error setting certificate verify locations:
CAfile: /etc/pki/tls/certs/ca-bundle.crt
CApath: none
обходным путем является использование системного завитка по умолчанию и избежать возиться с анаконда PATH
переменной. Вы можете либо
переименуйте двоичный файл Anaconda curl:)
mv /path/to/anaconda/bin/curl /path/to/anaconda/bin/curl_anaconda
или удалить Anaconda curl
conda remove curl
$ which curl
/usr/bin/curl
[0] Anaconda Ubuntu curl GitHub проблема https://github.com/conda/conda-recipes/issues/352
С $ 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.
Другой альтернативой для решения этой проблемы является отключение проверки сертификатов:
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 и переименовать в завиток-ка-пачки.crt и поместите его под путь \xampp (я не мог получить завиток.капат на работу). Я также обнаружил, что CAbundle на сайте cURL недостаточно для удаленного сайта, к которому я подключался, поэтому использовал тот, который указан с предварительно скомпилированной версией Windows curl 7.47.1 на http://winampplugins.co.uk/curl/
кажется, ваш завиток указывает на несуществующий файл с сертификатами CA или аналогичный.
для первичной ссылки на сертификаты CA с завитком см.:https://curl.haxx.se/docs/sslcerts.html
это сработало для меня
sudo apt-get install ca-certificates
затем перейдите в папку сертификаты в
sudo cd /etc/ssl/certs
затем вы копируете ca-сертификаты.файл crt в /etc/pki/tls/certs
sudo cp ca-certificates.crt /etc/pki/tls/certs
если нет папки tls/certs: создайте одну и измените разрешения с помощью chmod 777-R folderNAME
для чего это стоит, проверка which curl
выполняется также значительно.
пользователь на общей машине, которую я поддерживаю, получал эту ошибку. Но причина оказалась в том, что они установили Anaconda (http://continuum.io). При этом двоичный путь Anaconda ставится перед стандартным $PATH
, и с curl
binary, у которого были проблемы с поиском сертификатов по умолчанию, которые были установлен на этой машине Ubuntu.
у меня была точно такая же проблема. Как оказалось, мой /etc/ssl/certs/ca-certificates.crt
файл был искажен. Последняя запись показывала примерно следующее:--6-->
-----BEGIN CERTIFICATE-----
MIIEDTCCAvWgAwIBAgIJAN..lots of certificate text....AwIBAgIJAN-----END CERTIFICATE-----
после добавления новой строки перед -----END CERTIFICATE-----
, curl смог обработать файл сертификатов.
Это было очень раздражает, чтобы найти, так как мой 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
curl выполняет SSL
проверка сертификата по умолчанию, используя " пакет"
из Certificate Authority (CA)
открытые ключи (сертификаты CA). Неисполнение
комплект "завиток" -ка-пакет.crt; вы можете указать альтернативный файл
используя опцию --cacert.
если это HTTPS
сервер использует сертификат, подписанный CA, представленным в
пакет, проверка сертификата, вероятно, не удалось из-за
проблема с сертификатом (он может быть истек, или имя может
не соответствует доменному имени в URL-адрес).
если вы хотите отключить проверку curl сертификата, используйте
- k (или --insecure
опции).
curl --insecure http://........
выполните следующую команду в Git bash, которая отлично работает для меня
git config --global http.sslverify "false"
ошибка вызвана повреждением или отсутствием файлов сертификатов цепочки SSL в каталоге PKI. Вам нужно будет убедиться, что файлы ca-bundle, следующие шаги: В консоли / терминале:
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.оборот в минуту теперь установите yout rpm:
rpm2cpio your_url_donwload_ca-ceritificated.rpm | cpio -idmv
Теперь перезапустите службу: мой пример это команда:
sudo service2 httpd restart
это исправлено для меня:
curl --remote-name --time-cond cacert.pem \
https://curl.haxx.se/ca/cacert.pem
у меня была та же проблема.
Это была моя ошибка
error setting ce
rtificate verify locations:
CAfile: D:/git_repo/mingw32/ssl/certs/ca-bundle.crt
CApath: none
Он отлично работает для меня
я переименовываю имя каталога установки git в git_repo".