Недавно я обновил наш сервер с 8.04 до 10.04 и все программное обеспечение вместе с ним.
Из того, что я нашел в Интернете, похоже, что новая версия CURL не включает пакет CA и, как следствие, не может проверить, что сертификат сервера, к которому вы подключаетесь, подписан действующим органом. .
Фактическая ошибка:
CURL error: SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE: certificate verify failed
Некоторые люди, которых я обнаружил, предлагают вручную указать файл CA или полностью отключить проверку, установив параметр при вызове CURL, но я бы предпочел исправить проблему глобально, а не изменять вызовы CURL каждого приложения.
Есть ли способ исправить проблему CA CURL на сервере, чтобы весь существующий код приложения работал как есть, не нуждаясь в изменении?
У меня была такая же проблема, и после небольшого поиска я обнаружил, что вы можете загрузить пакет CA-сертификатов, готовых для curl на ubuntu, прямо с сайта curl dev.
cd /etc/ssl/certs
sudo wget http://curl.haxx.se/ca/cacert.pem
Теперь curl использует самую последнюю версию пакета, и все готово.
Была аналогичная проблема с 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
).
Обычно программное обеспечение, не имеющее уникальной реализации и скомпилированное с использованием OpenSSL, будет ссылаться на общесистемный файл ca-bundle.crt, который часто находится в /usr/share/ssl/certs
.
Местоположение может быть другим в Ubuntu, но пакет OpenSSL должен включать файл ca-bundle.
CURL имеет множество параметров, чтобы указать, как он проверяет сертификаты.
CURL_CA_BUNDLE
переменная окружения для расположения файла ca-bundle.--capath
позволяет указать каталог, в котором расположены сертификаты ЦС. (Отменяет CURL_CA_BUNDLE
)--cacert
позволяет указать файл сертификата ЦС.На моем сервере CentOS я могу запустить следующее, чтобы определить путь ca-bundle, который использует CURL:
$ curl-config --ca
/usr/share/ssl/certs/ca-bundle.crt