Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-cURL-SSL证书_Php_Ssl_Curl_Key - Fatal编程技术网

PHP-cURL-SSL证书

PHP-cURL-SSL证书,php,ssl,curl,key,Php,Ssl,Curl,Key,我在尝试使用curl执行GET方法以从远程webapi获取xml时遇到了一种情况 $url = 'xxxx.com' $key = '/KEY/PRIVATE.KEY' $perm = '/KEY/CERT.PEM' $options = array( CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_SSL

我在尝试使用curl执行GET方法以从远程webapi获取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\u error($curl))
我得到了以下结果:

unable to use client certificate (no key found or wrong pass phrase?)
所以,我实际上用两个字符串(
$URL=a.b
)来创建我的URL,但这应该是可行的,还是我疯了

对于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\u CAINFO=>$CAINFO,
$options
中,将
curl.cainfo=“PATH_TO/cacert.pem”
放在我的
php.ini
中(apache+php=>WAMP)。(
PATH_TO
已被我的真实路径替换)

无论如何,在所有这些改变之后,我仍然有同样的问题。 我必须在PHP5.3下工作,这是原因吗

编辑3

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

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

因此,在php中,我只需将
CURLOPT_VERIFYPEER
设置为
false
。 仅供参考,我基于远程web api提供给我的文档

关于,

模具(旋度错误($curl))
。布尔值false表示发生错误,curl_error()将告诉您错误是什么。cf edit。(谢谢)
die(curl\u error($curl))
。布尔值false表示发生错误,curl_error()将告诉您错误是什么。cf edit。(谢谢)