Как исправить проблемы с сертификатом 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, местоположение CA-файла, которое он ищет, не подходит для 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 (aka --insecure). Я хочу, чтобы это работало надежно.

6 ответов

После исследования и работы над этим в последние пару дней я получил его на работу, и ответ оказался довольно простым.

Мне нужно было установить 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 http://curl.haxx.se/ca/cacert.pem

в то же самое certs каталог. имеющий cafile указал на это сработало. В конце концов я положил его обратно ca-certificates.crt и это все еще работает.

Я точно не понимаю, почему это сработало или что происходит, но это решено.

Ключcafile не работает для меня (curl 7.45.0), но cacert (из опции --cacert) работает. Мой файл .curlrc:

capath=/etc/ssl/certs/
cacert=/etc/ssl/certs/ca-certificates.crt

После нескольких исследований я заставил его работать, и ответ оказался довольно простым. Делать пошагово

Step:1 Open terminal ctrl+alt+t
Step:2 cd /etc/ssl/certs/
Step:3 sudo wget http://curl.haxx.se/ca/cacert.pem 

Шаг 3 загрузит файл pem в папку certs

  Step 4: Check if .curlrc file is available in your home folder or not. 

.curlrc - это скрытый файл. проверьте ctrl+h в домашнем каталоге. если нет, то по типу терминала

Step 5:  nano ~/.curlrc 
Step 6: Now paste the below lines in the open file
        capath=/etc/ssl/certs/
        cacert=/etc/ssl/certs/ca-certificates.crt
Step 7: Now save the file and do your things using curl command.

NB Здесь я использовал нано-редактор, но вы можете использовать любой редактор.

Мы столкнулись с той же проблемой с одной из наших программ на C++ в Ubuntu 14.04.5. Метод .curlrc не работал.

Это было решено загрузкой файла ca-certificate.crt в /etc/ssl/certs/ca-certificates.crt и созданием символической ссылки ca-bundle.crt в каталоге /etc/pki/tls/certs/.

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

Это работает для меня. Просто сделать символическую ссылку ln -s /etc/ssl/certs/ca-certificates.crt /etc/pki/tls/certs/ca-bundle.crt

Вот альтернативный способ обойти это:

      echo insecure >> ~/.curlrc
Другие вопросы по тегам