cURL命令不能与ssl一起使用

时间:2014-03-04 07:32:11

标签: 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文件。

现在它显示“libcurl中不支持或禁用https”

但是,当我查看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);

2 个答案:

答案 0 :(得分:2)

curl_setopt CURLOPT_CAINFO $ch选项无效,因为它申请了不存在的cURL句柄(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); 是相对路径。

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

{{1}}

答案 1 :(得分:-4)

在您的代码中设置:

curl_setopt($cHandler, CURLOPT_SSL_VERIFYHOST, false);