На какой ОС / дистрибутиве вы работаете? Вам следует установить пакет ca-Certificates (так он называется в Debian / Ubuntu).
Игорь
40
Для дальнейшего использования я уже ca-certificatesустановил, но ошибка не исчезла. Проблема заключалась в том, что /etc/ssl/certs/ca-certificates.crtвместо них были расположены мои сертификаты /etc/pki/tls/certs/ca-bundle.crt, поэтому мне просто пришлось установить переменную среды CURL_CA_BUNDLEс правильным путем.
Роберт Смит
13
Прохладно! Это работает для меня, когда я установил export CURL_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt.
аккуратный
Ответы:
83
Эта ошибка связана с отсутствующим пакетом : ca-certificates. Установите это.
CA-Certificates уже самая новая версия, но я все еще получаю сообщение об ошибке
Pastor Bones
2
Конечно, вы получите ту же ошибку, если попытаетесь установить apt-cyg рекомендованным способом, используя curl и raw.github.com .
10
11
В Arch Linux вам также может понадобиться pacman -S ca-certificates-utils. Я сделал.
Марк Граймс
8
Этот пакет уже установлен. Этот ответ не полезен.
JimmyJames
9
@PastorBones У меня была та же проблема, что пакет был уже последним, но я думаю, что он был поврежден, поэтому sudo apt install --reinstall ca-certificatesпереустановил пакет и исправил ошибки, которые я видел
Will
153
У меня также была установлена новейшая версия ca-Certificates, но я все еще получал сообщение об ошибке:
Проблема заключалась в том, что curl ожидал, что сертификат будет в пути, /etc/pki/tls/certs/ca-bundle.crtно не смог найти его, потому что он был в пути /etc/ssl/certs/ca-certificates.crt.
Копирование моего сертификата в ожидаемый пункт назначения путем запуска
работал на меня. Вам нужно будет создать папки для целевого назначения, если они не существуют, запустив
sudo mkdir -p /etc/pki/tls/certs
При необходимости измените приведенную выше команду, чтобы имя файла назначения совпадало с путем, ожидаемым curl, т.е. замените /etc/pki/tls/certs/ca-bundle.crtпуть следующим «CAfile:» в сообщении об ошибке.
Вы также можете создать символическую ссылку, ln -sесли не хотите повторять ее каждый раз, когда обновляете.
starbeamrainbowlabs
4
Была такая же проблема для rescuetimeприложения на Fedora 25. sudo ln -s /etc/pki/tls/certs/ca-bundle.crt /etc/pki/tls/certs/ca-certificates.crtРешил проблему. ( CURL_CA_BUNDLEenv var не работал)
GabLeRoux
На моем убунту это исправили проблему: sudo ln -s /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.pem. Я фактически получал, The repository ... does not have a Release fileчто было вызвано отсутствующим сертификатом ( Could not load certificates from ...).
Спасибо за предоставленный метод, который не требует, чтобы я копировал системные файлы вручную, но при этом сохраняет безопасность использования сертификатов!
Стивен Джонсон
Спасибо. Это решило мою похожую проблему с pyenv & curl. Я использовал Ubuntu 14.04 и уже установил ca-сертификаты.
Давида
Этот подход также работает с xonsh (добавьте $CURL_CA_BUNDLE = "/etc/ssl/certs/ca-certificates.crt"к .xonshrc).
27:00
На всякий случай: версия с одним вкладышем:CURL_CA_BUNDLE=/path/to/bundle.crt curl http://example.com
лучший ответ, это сработало для меня на Linux Mint 17
Сантьяго
На Mac, он работал со следующими в~/.curlrccacert=/etc/openssl/cert.pem
amirathi
21
Самый быстрый способ обойти ошибку - добавить опцию -k где-то в вашем запросе curl. Эта опция «разрешает соединения с SSL-сайтами без сертификатов». (от curl --help)
Имейте в виду, что это может означать, что вы не разговариваете с конечной точкой, которой, как вы думаете, вы являетесь, поскольку они представляют сертификат, не подписанный ЦС, которому вы доверяете.
Это может обойти ошибку, но также делает «безопасное» соединение незащищенным.
Тим
1
На самом деле, нет. Насколько я знаю, вы не можете просто обойти шифрование безопасного соединения, поэтому оно все еще зашифровано и отправляется только на одну конечную точку. Кто-то поправит меня, если я ошибаюсь, но единственный риск, с которым вы столкнетесь, заключается в том, что вы можете стать жертвой атаки «человек посередине». Все еще маловероятно риск, если вы используете curl.
10
18
Да, действительно. Опция "-k" является сокращением для "--insecure". Если у вас есть посредник, что, по вашему мнению, он делает с вашими данными? Оповещение о спойлере: он расшифровывает его, крадет его и, возможно, модифицирует и внедряет обратно в небезопасный поток. Прямо со страницы руководства: "-k, --insecure (SSL)" Этот параметр явно позволяет curl выполнять "небезопасные" соединения и передачи SSL. Все соединения SSL пытаются сделать безопасными с помощью пакета сертификатов CA, установленного по умолчанию. Это делает все соединения, считающиеся «небезопасными», неудачными, если не используется -k, --insecure ».
Тим
2
Если вам нужен SSL, вам нужны конфиденциальность и проверка - -kфлаг означает, что вы теряете проверку. В зависимости от ваших потребностей это может быть приемлемым. MITM - это нетривиальные атаки, если вы предполагаете, что ваша сеть и сервер, с которым вы общаетесь, защищены от посторонних (вы можете сделать такое предположение?). Риск возрастает в зависимости от типа ваших данных (исходный код и сертификаты более рискованны, чем изображения). Вы можете проверить целостность данных после передачи (контрольные суммы и т. Д.), Но теперь вы переключаете свое доверие на этот канал контрольной суммы. В конце концов, -kвы получите немного больше работы.
Марк Фокс
Значит ли это, что если я использую самоподписанный сертификат. Я должен использовать опцию -k. Как это может быть невозможно проверить самоподписанный сертификат?
Линус
15
@roens - это правильно. Это влияет на всех пользователей Anaconda , с ошибкой ниже curl: (77) error setting certificate verify locations:
CAfile: /etc/pki/tls/certs/ca-bundle.crt
CApath: none
Обходной путь должен использовать системный завиток по умолчанию и избежать путаницы с предварительно добавленной PATHпеременной Anaconda . Вы также можете
Хорошая находка, я не знала, что Анаконда крала мой приоритет. Это сработало, как только я заменил curlна полный путь/usr/bin/curl
jxramos
Это очень помогло! Спасибо.
Шабабб Карим
12
От $ 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.
Для 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 / ротор /
В Windows вы также можете просто добавить «xampp» перед php следующим образом: curl.cainfo = "C: \ xampp \ php \ extras \ cacert.pem"
Райан Стейн
7
У меня была точно такая же проблема. Как оказалось, мой /etc/ssl/certs/ca-certificates.crtфайл был поврежден. Последняя запись показала что-то вроде этого:
-----BEGIN CERTIFICATE-----
MIIEDTCCAvWgAwIBAgIJAN..lots of certificate text....AwIBAgIJAN-----END CERTIFICATE-----
После добавления новой строки раньше -----END CERTIFICATE-----curl смог обработать файл сертификатов.
Это было очень неприятно узнать, так как моя update-ca-certificatesкоманда не давала мне никаких предупреждений.
Это может быть, а может и не быть проблемой конкретной версии curl, так что вот моя версия, просто для полноты:
Обходной путь, но он помогает мне после слишком много времени с сертификатами curl. Спасибо.
К. Гол
4
curl выполняет SSLпроверку сертификата по умолчанию, используя «пакет» Certificate Authority (CA)открытых ключей (CA certs). Пакет по умолчанию называется curl-ca-bundle.crt; Вы можете указать альтернативный файл, используя опцию --cacert.
Если этот HTTPSсервер использует сертификат, подписанный центром сертификации, представленным в комплекте, проверка сертификата, вероятно, не удалась из-за проблемы с сертификатом (срок его действия истек или имя может не совпадать с именем домена в URL-адресе).
Если вы хотите отключить проверку сертификата с помощью curl, используйте параметр -k (или --insecure).
Кроме того, «доверие к источнику» здесь довольно неактуально, поскольку без надлежащей проверки сертификата в отношении CA вы не представляете, кто является «источником».
Джефф Аллен
4
Кажется, ваш локон указывает на несуществующий файл с сертификатами CA или подобным.
Просто создайте папки, которых нет в вашей системе ..
/ И т.д. / ИПК / TLS / сертификаты /
и создайте файл, используя следующую команду,
sudo apt-get установить ca-сертификаты
а затем скопируйте и вставьте сертификат в папку назначения, которая отображается в вашей ошибке. Мой был " with message 'error setting certificate verify locations: CAfile: /etc/pki/tls/certs/ca-bundle.crt CApath: none' in", убедитесь, что вы вставили файл в точное местоположение, указанное в ошибке. Используйте следующую команду для копирования вставки.
Ни один из лучших ответов не сработал для меня, но это сработало!
Прачити Пракаш Прабху
2
Для чего это стоит, проверка which curlвыполняется тоже очень важно.
Пользователь на общедоступном компьютере, который я обслуживаю, получал эту ошибку. Но причина оказалась в том, что они установили Anaconda ( http://continuum.io ). Это положило двоичный путь Анаконды перед стандартом $PATH, и он приходит со своим собственным curlдвоичном, который имел проблемы с поиском сертификатов по умолчанию , которые были установлены на этой машине Ubuntu.
Я рекомендую проверить, which -a curlчтобы увидеть все доступное, и, конечно, отмечая, какой из них стоит на первом месте.
jxramos
2
Если у кого-то все еще есть проблемы, попробуйте это, у меня получилось. Удалите файлы в вашем /etc/ssl/certs/каталоге, затем переустановите ca-сертификаты:
sudo apt install ca-certificates --reinstall
Сделал это, когда я попытался установить Linuxbrew.
Это помогло мне, но я не удалял файлы на моей машине. Просто запустил простую команду и curl начал работать.
Josefhu15
1
Если вы используете homebrew на macOS или linuxbrew в linux, попробуйте переустановить opensslи curlвыполните следующие действия с этой страницы .
Это сообщение об ошибке указывает на то, что curl не может установить безопасное соединение с использованием openssl. Переустановка openssl должна решить проблему. Чтобы временно использовать небезопасное соединение для curl и git для загрузки любых необходимых файлов, выполните:
После нескольких часов попыток. Это спасло меня. Правильное решение для макос наконец. Большое спасибо! :)
Mrateb
1
У меня та же проблема: я создаю образ докера на альпийской основе, и когда я хочу свернуться на веб-сайт своей организации, появляется эта ошибка. Чтобы решить эту проблему, мне нужно получить сертификат CA моей компании, а затем добавить его в сертификаты CA моего изображения.
Получить сертификат CA
Используйте OpenSSL для получения сертификатов, связанных с сайтом:
Получите последний сертификат (содержимое между пометками -----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
Ваше изображение теперь будет работать правильно! \ О /
Ошибка связана с повреждением или отсутствием файлов сертификата цепочки SSL в каталоге PKI. Вам нужно убедиться, что файлы в комплекте, выполните следующие действия: В вашей консоли / терминале:
mkdir /usr/src/ca-certificates && cd /usr/src/ca-certificates
Ниже описываются шаги, чтобы исправить проблемы.
1. Узнайте, что файл существует по определенному URL.
2. Если нет, то загрузите файл с URL. https://curl.haxx.se/ca/cacert.pem
3. Скопируйте и вставьте файл по указанному пути в файле php.ini.
4. Перезапустите сервис Apache.
У меня была эта проблема, и оказалось, что моя версия CURL не может анализировать закодированные DER сертификаты (и не обращала внимания на параметр --cert-type). Когда я преобразовал сертификат в формат PEM, он работал.
В моем случае /etc/ssl/certs/ca-certificates.crtфайл отсутствовал. Как оказалось, я удалил содержимое /etc/ssl/certsиз Dockerfile при создании образа Docker. После настройки моих команд сценариев / bash команды запускаются из Dockerfile - curl теперь отлично работает из нового контейнера.
ca-certificates
установил, но ошибка не исчезла. Проблема заключалась в том, что/etc/ssl/certs/ca-certificates.crt
вместо них были расположены мои сертификаты/etc/pki/tls/certs/ca-bundle.crt
, поэтому мне просто пришлось установить переменную средыCURL_CA_BUNDLE
с правильным путем.export CURL_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt
.Ответы:
Эта ошибка связана с отсутствующим пакетом :
ca-certificates
. Установите это.В Ubuntu Linux (и аналогичных дистрибутивах):
В CygWin через Apt-Cyg
В Arch Linux (Raspberry Pi)
Документация рассказывает:
Как видно по адресу: Debian - Подробная информация о пакетах CA-сертификатов в Squeeze
источник
pacman -S ca-certificates-utils
. Я сделал.sudo apt install --reinstall ca-certificates
переустановил пакет и исправил ошибки, которые я виделУ меня также была установлена новейшая версия ca-Certificates, но я все еще получал сообщение об ошибке:
Проблема заключалась в том, что curl ожидал, что сертификат будет в пути,
/etc/pki/tls/certs/ca-bundle.crt
но не смог найти его, потому что он был в пути/etc/ssl/certs/ca-certificates.crt
.Копирование моего сертификата в ожидаемый пункт назначения путем запуска
работал на меня. Вам нужно будет создать папки для целевого назначения, если они не существуют, запустив
При необходимости измените приведенную выше команду, чтобы имя файла назначения совпадало с путем, ожидаемым curl, т.е. замените
/etc/pki/tls/certs/ca-bundle.crt
путь следующим «CAfile:» в сообщении об ошибке.источник
ln -s
если не хотите повторять ее каждый раз, когда обновляете.rescuetime
приложения на Fedora 25.sudo ln -s /etc/pki/tls/certs/ca-bundle.crt /etc/pki/tls/certs/ca-certificates.crt
Решил проблему. (CURL_CA_BUNDLE
env var не работал)sudo ln -s /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.pem
. Я фактически получал,The repository ... does not have a Release file
что было вызвано отсутствующим сертификатом (Could not load certificates from ...
).Поместите это в свой
.bashrc
(см. комментарий от Роберта)
источник
$CURL_CA_BUNDLE = "/etc/ssl/certs/ca-certificates.crt"
к.xonshrc
).CURL_CA_BUNDLE=/path/to/bundle.crt curl http://example.com
Создайте файл
~/.curlrc
со следующим содержаниемисточник
~/.curlrc
cacert=/etc/openssl/cert.pem
Самый быстрый способ обойти ошибку - добавить опцию -k где-то в вашем запросе curl. Эта опция «разрешает соединения с SSL-сайтами без сертификатов». (от curl --help)
Имейте в виду, что это может означать, что вы не разговариваете с конечной точкой, которой, как вы думаете, вы являетесь, поскольку они представляют сертификат, не подписанный ЦС, которому вы доверяете.
Например:
дал мне следующий ответ об ошибке:
Я добавил на -k:
и нет сообщения об ошибке. В качестве бонуса теперь у меня установлен apt-cyg. И CA-сертификаты.
источник
-k
флаг означает, что вы теряете проверку. В зависимости от ваших потребностей это может быть приемлемым. MITM - это нетривиальные атаки, если вы предполагаете, что ваша сеть и сервер, с которым вы общаетесь, защищены от посторонних (вы можете сделать такое предположение?). Риск возрастает в зависимости от типа ваших данных (исходный код и сертификаты более рискованны, чем изображения). Вы можете проверить целостность данных после передачи (контрольные суммы и т. Д.), Но теперь вы переключаете свое доверие на этот канал контрольной суммы. В конце концов,-k
вы получите немного больше работы.@roens - это правильно. Это влияет на всех пользователей Anaconda , с ошибкой ниже
curl: (77) error setting certificate verify locations: CAfile: /etc/pki/tls/certs/ca-bundle.crt CApath: none
Обходной путь должен использовать системный завиток по умолчанию и избежать путаницы с предварительно добавленной
PATH
переменной Anaconda . Вы также можетеПереименуйте бинарный файл 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
источник
curl
на полный путь/usr/bin/curl
От
$ man curl
:источник
Для PHP-кода, работающего на XAMPP в Windows, я обнаружил, что мне нужно отредактировать php.ini, чтобы включить ниже
а затем скопируйте в файл 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 / ротор /
источник
У меня была точно такая же проблема. Как оказалось, мой
/etc/ssl/certs/ca-certificates.crt
файл был поврежден. Последняя запись показала что-то вроде этого:После добавления новой строки раньше
-----END CERTIFICATE-----
curl смог обработать файл сертификатов.Это было очень неприятно узнать, так как моя
update-ca-certificates
команда не давала мне никаких предупреждений.Это может быть, а может и не быть проблемой конкретной версии curl, так что вот моя версия, просто для полноты:
источник
Это сработало для меня
затем перейдите в папку сертификатов в
затем вы копируете файл ca-certificate.crt в
/etc/pki/tls/certs
если папка tls / certs отсутствует: создайте ее и измените права доступа с помощью chmod 777 -R folderNAME
источник
Еще одна альтернатива для устранения этой проблемы - отключить проверку сертификата:
источник
curl выполняет
SSL
проверку сертификата по умолчанию, используя «пакет»Certificate Authority (CA)
открытых ключей (CA certs). Пакет по умолчанию называется curl-ca-bundle.crt; Вы можете указать альтернативный файл, используя опцию --cacert.Если этот
HTTPS
сервер использует сертификат, подписанный центром сертификации, представленным в комплекте, проверка сертификата, вероятно, не удалась из-за проблемы с сертификатом (срок его действия истек или имя может не совпадать с именем домена в URL-адресе).Если вы хотите отключить проверку сертификата с помощью curl, используйте параметр -k (или
--insecure
).например
источник
Кажется, ваш локон указывает на несуществующий файл с сертификатами CA или подобным.
Для получения основной ссылки на сертификаты CA с помощью curl см. Https://curl.haxx.se/docs/sslcerts.html.
источник
Просто создайте папки, которых нет в вашей системе ..
и создайте файл, используя следующую команду,
а затем скопируйте и вставьте сертификат в папку назначения, которая отображается в вашей ошибке. Мой был "
with message 'error setting certificate verify locations: CAfile: /etc/pki/tls/certs/ca-bundle.crt CApath: none' in
", убедитесь, что вы вставили файл в точное местоположение, указанное в ошибке. Используйте следующую команду для копирования вставки.Исправлена.
источник
Для чего это стоит, проверка
which curl
выполняется тоже очень важно.Пользователь на общедоступном компьютере, который я обслуживаю, получал эту ошибку. Но причина оказалась в том, что они установили Anaconda ( http://continuum.io ). Это положило двоичный путь Анаконды перед стандартом
$PATH
, и он приходит со своим собственнымcurl
двоичном, который имел проблемы с поиском сертификатов по умолчанию , которые были установлены на этой машине Ubuntu.источник
which -a curl
чтобы увидеть все доступное, и, конечно, отмечая, какой из них стоит на первом месте.Если у кого-то все еще есть проблемы, попробуйте это, у меня получилось. Удалите файлы в вашем
/etc/ssl/certs/
каталоге, затем переустановите ca-сертификаты:Сделал это, когда я попытался установить Linuxbrew.
источник
Если вы используете homebrew на macOS или linuxbrew в linux, попробуйте переустановить
openssl
иcurl
выполните следующие действия с этой страницы .Возможно, вам придется начать новый сеанс оболочки, чтобы проверить результат с
Если в выводе показывается следующий вывод, проблема должна быть решена!
Ссылки:
источник
У меня та же проблема: я создаю образ докера на альпийской основе, и когда я хочу свернуться на веб-сайт своей организации, появляется эта ошибка. Чтобы решить эту проблему, мне нужно получить сертификат CA моей компании, а затем добавить его в сертификаты CA моего изображения.
Получить сертификат CA
Используйте OpenSSL для получения сертификатов, связанных с сайтом:
Это выведет что-то вроде:
Получите последний сертификат (содержимое между пометками
-----BEGIN CERTIFICATE-----
и-----END CERTIFICATE-----
включенными) и сохраните его в файл (например, mycompanyRootCA.crt)Создайте свой имидж
Затем, когда вы создадите свой образ докера из alpine, сделайте следующее:
Ваше изображение теперь будет работать правильно! \ О /
источник
Просто найдите, что это решение идеально подходит для меня.
Я нашел это решение отсюда
источник
Ошибка связана с повреждением или отсутствием файлов сертификата цепочки SSL в каталоге PKI. Вам нужно убедиться, что файлы в комплекте, выполните следующие действия: В вашей консоли / терминале:
Войдите на этот сайт: https://rpmfind.net/linux/rpm2html/search.php?query=ca-certificates , получите ваш CA-сертификат для SO. Скопируйте URL-адрес загрузки и вставьте в URL-адрес: wget your_url_donwload_ca-ceritificated.rpm сейчас, установите свой rpm:
Теперь перезапустите свой сервис: мой пример этой команды:
источник
Запустите следующую команду в git bash, которая отлично работает для меня
источник
Это исправлено для меня:
источник
Я нашел это исправление простым и безопасным. Это просто включает в себя изменение пути двух значений в
php.ini
файле. Следуйте инструкциям здесь: https://ourcodeworld.com/articles/read/196/xampp-wampp-php-ssl-certificate-error-unable-to-get-local-issuer-certificateисточник
Ниже описываются шаги, чтобы исправить проблемы.
1. Узнайте, что файл существует по определенному URL.
2. Если нет, то загрузите файл с URL. https://curl.haxx.se/ca/cacert.pem
3. Скопируйте и вставьте файл по указанному пути в файле php.ini.
4. Перезапустите сервис Apache.
источник
У меня была эта проблема, и оказалось, что моя версия CURL не может анализировать закодированные DER сертификаты (и не обращала внимания на параметр --cert-type). Когда я преобразовал сертификат в формат PEM, он работал.
источник
В моем случае
/etc/ssl/certs/ca-certificates.crt
файл отсутствовал. Как оказалось, я удалил содержимое/etc/ssl/certs
из Dockerfile при создании образа Docker. После настройки моих команд сценариев / bash команды запускаются из Dockerfile - curl теперь отлично работает из нового контейнера.источник