php - cURL 命令不适用于 ssl

标签 php curl ssl https

我们现有的系统(ubuntu 服务器)使用 curl 通过 https 连接到另一个远程服务器。从任何浏览器连接都有效,我们得到响应。我打开了端口 443 以确保它没有被防火墙阻止。

为了测试,我通过终端使用 curl 命令并收到错误:

curl: (60) SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines: SSL3_GET_SERVER_CERTIFICATE:certificate verify failed.

然后在运行 curl 命令时使用 --cacert 指定 pem 文件。

现在它显示“https not supported or disabled in libcurl”

但是,当我查看 curl 信息时,它列出了以下内容:libcurl/7.19.7 OpenSSL/0.9.8k zlib/1.2.3.3 libidn/1.15 这使得它似乎包含 SSL 支持。

此外,当我查看 phpinfo 时,它显示 curl 已使用 OpenSSL 启用,这似乎支持是内置的。我尝试在脚本中设置 curl_setopt 但仍然没有成功。

有什么建议吗?

这是脚本中的代码片段:

$url = 'https://ourserver.com/user/';
$fields = array(
    'user' => urlencode($user),
    'password' => urlencode($pass),
    );
foreach ($fields as $key => $value) {
    $fields_string .= $key . '=' . $value . '&';
}
rtrim($fields_string, '&');

curl_setopt($ch, CURLOPT_CAINFO, '/home/test/key.pem');

$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_URL => $url . '?' . $fields_string,
    CURLOPT_USERAGENT => 'Sample cURL Request'
));

$resp = curl_exec($curl);

curl_close($curl);

最佳答案

您对 CURLOPT_CAINFO 选项的 curl_setopt 调用无效,因为它适用于不存在的 cURL 句柄 ($ch)。您必须在 curl_init 调用之后移动此调用,并传递正确的 cURL 句柄 ($curl)。 另外CURLOPT_CAINFO选项需要绝对路径,'/home/test/key.pem'是相对路径。

所以你的代码应该是这样的:

$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_URL => $url . '?' . $fields_string,
    CURLOPT_USERAGENT => 'Sample cURL Request',
    CURLOPT_CAINFO => $_SERVER['DOCUMENT_ROOT'].'/home/test/key.pem',
));

$resp = curl_exec($curl);

curl_close($curl);

关于php - cURL 命令不适用于 ssl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22165626/

相关文章:

facebook - 外部选项卡拒绝连接

php - 迭代列

php - preg_split 字符串不在单引号之间

curl - 文本的Watson语音返回有关文件大小的奇怪错误

api - curl LinkedIn API

java - 分发自签名SSL证书: How to skip requirement to import to key store

过期证书上的 Java 信任管理器行为

php - 解析 JSON 数组 PHP - 字符串和 float

php - 网页设计/开发

javascript - 如何将curl上传进度发送给ajax显示