
Я использую Ubuntu 14.04. При использовании curl возникает следующая ошибка:
curl: (77) error setting certificate verify locations: CAfile: /etc/pki/tls/certs/ca-bundle.crt CApath:
Насколько я понял из поиска в Google, местоположение CAfile, которое он ищет, неверно для Ubuntu (и его нет на моем компьютере), но /etc/ssl/certs/ca-certificates.crt
это правильное местоположение.
Большинство решений включали установку переменной окружения CURL_CA_BUNDLE
в правильное местоположение или добавление cacert=/etc/ssl/certs/ca-certificates.crt
в (ново созданный) .curlrc
файл в моем домашнем каталоге. Я пробовал оба варианта, и ни один из них не решил проблему полностью. curl находит это местоположение, но все равно не работает, выдавая ошибку:
curl: (60) SSL certificate problem: self signed certificate in certificate chain
Я также попробовал удалить и переустановить curl в Ubuntu, а также обновить сертификаты CA, $ sudo update-ca-certificates --fresh
что обновило сертификаты, но ошибка 60 все равно не исчезла.
Я не настолько разбираюсь в сертификатах CA и сомневаюсь, что я намеренно добавлял какой-то самоподписанный сертификат в прошлом. Возможно, случайно, я не знаю.
Кто-нибудь знает, как это исправить? Есть ли способ начать все заново со всеми моими сертификатами? Или кто-нибудь вообще знает, как мне выяснить, где находится этот самоподписанный сертификат, а затем как его удалить?
PS: Я не хочу использовать флаг -k (он же --insecure). Я хочу, чтобы это работало безопасно.
решение1
После нескольких последних дней исследований и работы над этим вопросом мне удалось его реализовать, и ответ оказался довольно простым.
Мне нужно было указать capath=/etc/ssl/certs/
в моем .curlrc
файле.
Это заставило curl работать в командной строке. Чтобы еще больше заставить curl работать в R (где я впервые столкнулся с проблемой), мне также нужно было иметь cacert=/etc/ssl/certs/ca-certificates.crt
в моем .curlrc
файле, как я пробовал раньше, иначе он продолжал искать/etc/pki/tls/certs/ca-bundle.crt
Я до сих пор не понимаю, почему я вижу ошибку о самоподписанных сертификатах.
Основываясь на некоторых других случайных находках, я также загрузил сертификат с сайта Curl со следующими данными:
sudo wget https://curl.se/ca/cacert.pem
в тот же certs
каталог. cafile
Указав на это, тоже сработало. В конце концов я вернул его обратно, ca-certificates.crt
и он все еще работает.
Я не совсем понимаю, почему это сработало и что происходит, но проблема решена.
решение2
кафилеkey не работает у меня (curl 7.45.0), но cacert (из опции --cacert) работает. Мой.curlrcфайл:
capath=/etc/ssl/certs/
cacert=/etc/ssl/certs/ca-certificates.crt
решение3
После нескольких исследований мне удалось заставить это работать, и ответ оказался довольно простым.
Откройте терминал ctrl++ и смените рабочий каталог alt:t
cd /etc/ssl/certs/
Загрузите файл pem всертификатыпапка
sudo wget https://curl.se/ca/cacert.pem
Теперь откройте файл..curlrc
nano ~/.curlrc
Добавьте следующие строки в открытый файл
capath=/etc/ssl/certs/
cacert=/etc/ssl/certs/ca-certificates.crt
Теперь сохраните файл и выполните необходимые действия с помощью команды curl.
Примечание.Здесь я использовал редактор nano, но вы можете использовать любой редактор.
решение4
Мы столкнулись с той же проблемой с одной из наших программ C++ в Ubuntu 14.04.5. .curlrc
Метод не работал.
Эта проблема была решена путем загрузки ca-certificates.crt
и /etc/ssl/certs/ca-certificates.crt
создания символической ссылки ca-bundle.crt
в /etc/pki/tls/certs/
каталоге.
Надеюсь это поможет!