Я недавно обновил наш сервер с 8.04 до 10.04, и все программное обеспечение вместе с ним.
Из того, что я нашел в Интернете, кажется, что новая версия CURL не включает в себя пакет CA и, в результате, не может проверить, что сертификат сервера, к которому вы подключаетесь, подписан действующим органом ,
Фактическая ошибка:
Ошибка CURL: проблема с сертификатом SSL, убедитесь, что сертификат CA в порядке. Подробности: ошибка: 14090086: подпрограммы SSL: SSL3_GET_SERVER_CERTIFICATE: сертификат не удался
В некоторых местах, которые я обнаружил, предлагается вручную указать файл CA или вообще отключить проверку, установив параметр при вызове CURL, но я бы предпочел решить проблему глобально, а не изменять вызовы CURL каждого приложения.
Есть ли способ исправить проблему CA CURL для всего сервера, чтобы весь существующий код приложения работал как есть, без необходимости его модификации?
У Ubuntu 12.04 была похожая проблема при запуске curl из командной строки для получения инструментов командной строки aws, которые были в github. Я нашел, запустил ли я командную строку как таковую:
это будет работать. Но попытка установить переменную среды CURL_CA_BUNDLE, чтобы я мог избежать аргумента "cacert", не сработает. В конечном итоге обновление CA-сертификатов, похоже, решило проблему:
В качестве примечания, в какой-то момент я обновил сертификаты из 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
Переменная среды для расположения са-расслоением файла.--capath
позволяет указать каталог, в котором расположены сертификаты CA. (ПереопределяетCURL_CA_BUNDLE
)--cacert
позволяет указать файл сертификата CA.На моем сервере CentOS я могу запустить следующее, чтобы определить путь ca-bundle, который использует CURL:
источник
libcurl3-openssl-dev
пакета, основанная на быстром поиске в Интернете.CURL_CA_BUNDLE
это просто переменная окружения. В БашCURL_CA_BUNDLE=/path/to/file
.