1

我正在尝试通过 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' 为空。

我在这里想念什么?

4

0 回答 0