使用自定义证书在php中使用curl验证服务器

时间:2013-08-05 16:31:03

标签: php curl https

我正在尝试通过https连接到可用的API,并且还通过证书实现客户端身份验证。

我找不到使用为服务器提供的自定义证书和签名与php连接的方法。

以下是我用来连接到curl的API的代码:

$curl = curl_init($url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($curl, CURLOPT_CAINFO, getcwd() . 'server-custom-cert.crt');
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

这些设置没有给出API的任何答案(我也尝试将服务器自定义证书转换为pem格式而没有任何成功),而当我使用这些设置而没有对同伴或主机进行任何验证时,我可以通常使用API​​:

$curl = curl_init($url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 

当我使用以下方式查看有关会话的信息时:

$info = curl_getinfo($curl);
echo '<pre>' . print_r($info, true) . '</pre>';

我明白了:

Array
(
[url] => https://api.example.com
[content_type] => 
[http_code] => 0
[header_size] => 0
[request_size] => 0
[filetime] => 0
[ssl_verify_result] => 0
[redirect_count] => 0
[total_time] => 0
[namelookup_time] => 0
[connect_time] => 0
[pretransfer_time] => 0
[size_upload] => 0
[size_download] => 0
[speed_download] => 0
[speed_upload] => 0
[download_content_length] => -1
[upload_content_length] => -1
[starttransfer_time] => 0
[redirect_time] => 0
[certinfo] => Array
    (
    )

[primary_ip] => 
[primary_port] => 0
[local_ip] => 
[local_port] => 0
[redirect_url] => 
)

'httpStatusCode'为空。

我在这里缺少什么?

0 个答案:

没有答案