Как исправить проблемы с сертификатами CA с помощью Curl в Ubuntu 14.04?

Как исправить проблемы с сертификатами CA с помощью Curl в Ubuntu 14.04?

Я использую 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/каталоге.

Надеюсь это поможет!

Связанный контент