我正在尝试在Windows服务器(运行IIS)上修复php_curl调用,该服务器返回熟悉的错误“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设置的任何想法?
答案 0 :(得分:14)
圣洁的通心粉,一位同事刚刚为我解开了这个谜团。将它留在这里,以防它帮助其他人。
这个curl php.ini设置直到PHP 5.3.7才被添加:http://www.php.net/manual/en/curl.configuration.php#ini.curl.cainfo
我正在使用的特定测试服务器运行的是旧版本,因此PHP没有从php.ini读取该设置。就这么简单。