我正在尝试修复 Windows 服务器(运行 IIS)上的 php_curl 调用,该调用返回熟悉的错误“SSL 证书问题,请验证 CA 证书是否正常。详细信息:
错误:14090086:SSL 例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败”。
正如这里许多相关问题中详细介绍的那样,我下载了http://curl.haxx.se/ca/cacert.pem 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 调用应用程序。
潜在的愚蠢错误检查:
- 我在 php.ini 编辑之间重新启动 IIS
- 我知道我正在编辑正确的 php.ini,因为“echo ini_get('smtp_port');”反映我对该设置所做的更改(更改非关键设置只是为了测试)
- 我知道 IIS 可以读取该文件,因为它在使用curl_setopt() 设置它时有效(见上图)
尝试直接查看 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 http://www.php.net/manual/en/curl.configuration.php#ini.curl.cainfo
我正在使用的特定测试服务器正在运行比该版本更旧的版本,因此 PHP 没有从 php.ini 读取该设置。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)