【问题标题】:PHP ignoring curl.cainfo setting in php.ini (apparently)PHP 忽略 php.ini 中的 curl.cainfo 设置(显然)
【发布时间】:2014-04-30 15:27:24
【问题描述】:

我正在尝试修复 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 调用。

潜在的愚蠢错误检查:

  1. 我在 php.ini 编辑之间重新启动 IIS
  2. 我知道我正在编辑正确的 php.ini,因为“echo ini_get('smtp_port');”反映了我对该设置所做的更改(更改非关键设置只是为了测试)
  3. 我知道 IIS 可以读取该文件,因为它在使用 curl_setopt() 设置时有效(上图)

尝试直接查看ini设置表明PHP似乎对此一无所知(我这样做对吗?):

var_dump(ini_get('curl.cainfo'));

==> bool(false)

知道为什么 PHP 不会读取 curl.cainfo 设置吗?

【问题讨论】:

    标签: php iis curl ssl


    【解决方案1】:

    一位同事告诉我,直到 PHP 5.3.7 才添加此 curl php.ini 设置:http://www.php.net/manual/en/curl.configuration.php#ini.curl.cainfo

    我正在使用的特定测试服务器运行的是旧版本,因此 PHP 没有从 php.ini 读取该设置。

    【讨论】:

    • 我遇到了同样的问题,除了 php 7.1,我不知道如何解决它:(
    猜你喜欢
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    • 2014-10-10
    • 1970-01-01
    • 2015-11-24
    • 1970-01-01
    • 2013-04-04
    • 2011-06-09
    相关资源
    最近更新 更多