Я пытаюсь исправить вызов php_curl на сервере Windows (с запуском IIS), который возвращает знакомую ошибку «SSL-сертификат», убедитесь, что сертификат CA в порядке. Подробности: ошибка: 14090086: процедуры SSL: SSL3_GET_SERVER_CERTIFICATE: проверка сертификата не выполнена ».
Как описано во многих связанных с этим вопросах, я загрузил http://curl.haxx.se/ca/cacert.pem , переместил его на жесткий диск моего сервера и добавил параметр curl.cainfo в свой php.ini:
curl.cainfo = "C:\path\to\cacert.pem"
Ничего, все равно получаю ту же ошибку. Однако указание пути в коде PHP приводит к успешному ответу!
$ch = curl_init($url); curl_setopt($ch, CURLOPT_CAINFO, "C:\path\to\cacert.pem"); $response = curl_exec($ch);
Это дает мне обходной путь, который я могу использовать на данный момент, но я поддерживаю большое приложение с вызовами php_curl во многих местах, поэтому было бы логичнее указать этот параметр один раз в php.ini, чтобы он применим ко всем вызовам php_curl в приложение.
Потенциальная проверка тупой ошибки:
Попытка взглянуть на настройку ini напрямую показывает, что PHP, похоже, ничего не знает об этом (я делаю это правильно?):
var_dump(ini_get('curl.cainfo')); ==> bool(false)
Любые идеи, почему PHP не будет читать настройку curl.cainfo?
Святые макароны, коллега, просто решили эту тайну для меня. Оставив его здесь, если он поможет кому-то другому.
Этот параметр curl php.ini не был добавлен до тех пор, пока PHP 5.3.7: http://www.php.net/manual/en/curl.configuration.php#ini.curl.cainfo
На конкретном тестовом сервере, с которым я работал, работала более старая версия, поэтому PHP не читал этот параметр из php.ini. Просто как тот.