Как мне работать с сертификатами с использованием 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
переменная. Вы также можете
Переименуйте бинарный файл Anaconda curl:)
mv /path/to/anaconda/bin/curl /path/to/anaconda/bin/curl_anaconda
ИЛИ удалить 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 был запущен:
Проверить curl без ssl:
curl --cacert http_ca.crt -u elastic https://localhost:9200 -k
нижний регистр-k
за небезопасное соединение.Проверьте конфиги curl:
curl-config --configure
, заметил что такое ca-bundle:--with-ca-bundle=/etc/ssl/certs/ca-certificates.crt
.Скопируйте файл http_ca.crt из контейнера в:
/usr/local/share/ca-certificates/
, исходная команда. здесь .Запустите обновление ca-сертификатов:
sudo update-ca-certificates
.Выполнить завиток:
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.
Для окон: -
Загрузите сертификат с https://curl.se/docs/caextract.html .
Переименуйте cacert.pem в curl-ca-bundle.crt.
Добавьте файл в любое из указанных ниже мест.
Проверьте это для деталей 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