Как я могу работать с сертификатами с помощью cURL при попытке доступа к url-адресу HTTPS?
Я получаю следующую ошибку, используя 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 через Apt-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работал для меня. Вам понадобится создать папки для целевого назначения, если они не существуют работает
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или удалить Анаконда скручиваемость
conda remove curl
$ which curl /usr/bin/curl[0] Anaconda Ubuntu curl GitHub issuehttps://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 и переименовать в curl-ca-bundle.crt и поместите его под путь \xampp (я не мог получить curl.капат на работу). Я также обнаружил, что CAbundle на сайте cURL недостаточно для удаленного сайта, к которому я подключался, поэтому использовал тот, который указан с предварительно скомпилированной версией Windows curl 7.47.1 at http://winampplugins.co.uk/curl/
кажется, что ваш curl указывает на несуществующий файл с сертификатами CA или аналогичными.
для первичного ссылкой на сертификаты центра сертификации с поддержкой curl, см.: https://curl.haxx.se/docs/sslcerts.html
это сработало для меня
sudo apt-get install ca-certificatesзатем перейдите в папку certificates по адресу
sudo cd /etc/ssl/certsзатем вы копируете ca-сертификаты.crt файл в
/etc/pki/tls/certssudo cp ca-certificates.crt /etc/pki/tls/certsесли нет папки tls / certs: создайте ее и измените разрешения с помощью chmod 777-R folderNAME
для чего это стоит, проверка
which curlвыполняется тоже имеет значение.пользователь на общей машине, которую я поддерживаю, получал эту ошибку. Но причина оказалась в том, что они установили Anaconda (http://continuum.io). при этом двоичный путь анаконды ставится перед стандартным
$PATH, и сcurlдвоичный, который имел проблемы с поиском сертификатов по умолчанию, что были установлен на этой машине Ubuntu.
у меня была точно такая же проблема. Как оказалось, мой
/etc/ssl/certs/ca-certificates.crtфайл был деформирован. Последняя запись показывала что-то вроде этого:-----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). Неисполнение связка называется curl-ca-bundle.crt; можно указать альтернативный файл используя опцию --cacert.если это
HTTPSсервер использует сертификат, подписанный центром сертификации, представленных в пакет, проверка сертификата, вероятно, не удалось из-за a проблема с сертификатом (он может быть истек, или имя может не совпадает с доменным именем в URL).если вы хотите отключить проверку сертификата curl, используйте the-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-сертификат, для так. Копировать ссылку и вставить в 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".
Comments