Как исправить проблемы с сертификатом 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