PHP cURL SSL CERT

时间:2015-07-27 14:05:26

标签: php ssl curl key

我在尝试使用curl进行GET方法从远程web api获取xml时遇到了这种情况。

    $url = 'xxxx.com'
    $key = '/KEY/PRIVATE.KEY'
    $perm = '/KEY/CERT.PEM'
    $options = array(
        CURLOPT_URL             => $url,
        CURLOPT_RETURNTRANSFER  => true,
        CURLOPT_SSLCERT         => $perm ,
        CURLOPT_SSLKEY          => $key,
        CURLOPT_HEADER          => false,
    );
    $curl = curl_init();
    curl_setopt_array($curl , $options);
    $resp = curl_exec($curl);
    curl_close($curl);

我必须链接SSL证书和pem,但$ resp总是返回false。

这是我的cURL请求应该在命令提示符下:

curl -k  -v -X GET "[-URL-]" --cert ./KEY/CERT.pem --key ./KEY/PRIVATE.KEY

非常感谢任何帮助......

修改

所以,我使用了两种方法来尝试调试:

stderr我有:

string ''.' unknown as intern or extern command, program file or executable file

' (length=117)

使用die(curl_error($curl))我得到了这个:

unable to use client certificate (no key found or wrong pass phrase?)

所以,我实际上是用两个字符串($url = a . b)制作我的网址,但是这应该有用,还是我疯了?

对于ssl错误,我不明白为什么我有这个问题,因为这在命令提示符下完全正常...

编辑2

所以,我发现如何解决部分问题:我必须使用realpath()

但现在我有了一个新问题:

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

所以,我在stackoverflow上发现了一些更新cacert.pem文件的响应。 我做了,添加了CURLOPT_CAINFO => $cainfo,$options中,将curl.cainfo = "PATH_TO/cacert.pem"放入php.ini(apache + php => WAMP)。 (PATH_TO已被我的真实路径所取代。)

无论如何,在所有变化之后,我仍然有同样的问题。 我必须在php 5.3下工作,它会成为原因吗?

编辑3

最终找到了答案。我应该更仔细地寻找卷曲选项......

在命令提示符-k中允许不安全的连接。

所以,在php中,我只需要将CURLOPT_VERIFYPEER设置为false。 仅供参考,我基于远程网络API给我的文档。

此致

0 个答案:

没有答案