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

13

Я использую 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). Я хочу, чтобы это работало надежно.

themaninthewoods
источник

Ответы:

10

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

Мне нужно было установить 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и он все еще работает.

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

themaninthewoods
источник
8

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

capath=/etc/ssl/certs/
cacert=/etc/ssl/certs/ca-certificates.crt
герцог
источник
1
это работало для меня на Ubuntu 16.04!
Joost Döbken
0

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

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

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

тамильский
источник
0

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

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 Здесь я использовал нано-редактор, но вы можете использовать любой редактор.

PyDevSRS
источник