Ubuntu 10.04 / CURL: Как мне исправить / обновить CA Bundle?

17

Я недавно обновил наш сервер с 8.04 до 10.04, и все программное обеспечение вместе с ним.

Из того, что я нашел в Интернете, кажется, что новая версия CURL не включает в себя пакет CA и, в результате, не может проверить, что сертификат сервера, к которому вы подключаетесь, подписан действующим органом ,

Фактическая ошибка:

Ошибка CURL: проблема с сертификатом SSL, убедитесь, что сертификат CA в порядке.
Подробности: ошибка: 14090086: подпрограммы SSL: SSL3_GET_SERVER_CERTIFICATE:
сертификат не удался 

В некоторых местах, которые я обнаружил, предлагается вручную указать файл CA или вообще отключить проверку, установив параметр при вызове CURL, но я бы предпочел решить проблему глобально, а не изменять вызовы CURL каждого приложения.

Есть ли способ исправить проблему CA CURL для всего сервера, чтобы весь существующий код приложения работал как есть, без необходимости его модификации?

Ник
источник

Ответы:

17

У меня возникла та же проблема, и после того, как я немного покопался, обнаружил, что вы можете загрузить пакет CA-сертификатов, готовых для curl в Ubuntu, прямо с сайта curl dev.

cd /etc/ssl/certs
sudo wget http://curl.haxx.se/ca/cacert.pem

Теперь curl использует самый современный пакет, и вы готовы к работе.

Пол Александр
источник
1
после этого мне пришлось обновить с помощью: update-ca-Certificates -f
Grain
9

У Ubuntu 12.04 была похожая проблема при запуске curl из командной строки для получения инструментов командной строки aws, которые были в github. Я нашел, запустил ли я командную строку как таковую:

curl https://raw.github.com/timkay/aws/master/aws -o aws --cacert /etc/ssl/certs/ca-certificates.crt

это будет работать. Но попытка установить переменную среды CURL_CA_BUNDLE, чтобы я мог избежать аргумента "cacert", не сработает. В конечном итоге обновление CA-сертификатов, похоже, решило проблему:

sudo update-ca-certificates

В качестве примечания, в какой-то момент я обновил сертификаты из curl.haxx.se, которые не решили проблему, но, возможно, были связаны. ( sudo wget http://curl.haxx.se/ca/cacert.pemбежать от /etc/ssl/certs).

Боб Морли
источник
Ссылка 404 для меня. Это работает: curl.haxx.se/ca/cacert.pem
dave1010
2
Хм. Кажется хитрым, чтобы получить файл, содержащий такие сертификаты, но не через HTTPS.
Мэтью Шинкель
5

Как правило, программное обеспечение, которое не имеет уникальной реализации и скомпилировано с OpenSSL, будет ссылаться на общесистемный ca-bundle.crt, часто расположенный в /usr/share/ssl/certs.

Расположение может быть другим в Ubuntu, но пакет OpenSSL должен включать файл ca-bundle.

CURL имеет множество опций, чтобы указать, как он проверяет сертификаты.

  • CURL_CA_BUNDLEПеременная среды для расположения са-расслоением файла.
  • --capathпозволяет указать каталог, в котором расположены сертификаты CA. (Переопределяет CURL_CA_BUNDLE)
  • --cacert позволяет указать файл сертификата CA.

На моем сервере CentOS я могу запустить следующее, чтобы определить путь ca-bundle, который использует CURL:

$ curl-config --ca
/usr/share/ssl/certs/ca-bundle.crt
сигнализатор
источник
1
Открытый SSL установлен. У меня есть файл «ca-certificate.crt» в / etc / ssl / certs /, который выглядит как набор сертификатов, соединенных вместе, но я полагаю, CURL его не видит? Есть ли в CURL параметр конфигурации для CA-Bundle?
Ник
Вы уверены, что это не тот тип сертификата, который он пытается проверить? Новые технологии сертификатов, такие как сертификаты расширенной проверки, часто требуют обновления в виде пакетов, так как корневые сертификаты являются относительно новыми. Проверьте мое предстоящее редактирование тоже.
Warner
curl-config не является допустимой командой в Ubuntu. Как мне установить CURL_CA_BUNDLE?
Ник
Похоже, это часть libcurl3-openssl-devпакета, основанная на быстром поиске в Интернете. CURL_CA_BUNDLEэто просто переменная окружения. В Баш CURL_CA_BUNDLE=/path/to/file.
Уорнер
Хорошо, пакет установлен, но "curl-config --ca" выдает пустую строку. Я попытался установить переменную, используя 'CURL_CA_BUNDLE = "/ etc / ssl / certs / ca-сертификаты.crt"'. Но "curl-config --ca" все равно выдает пустую строку после этого.
Ник