带有 SSL 的 cURL 返回我验证位置

Posted

技术标签:

【中文标题】带有 SSL 的 cURL 返回我验证位置【英文标题】:cURL with SSL return me verify locations 【发布时间】:2018-05-12 03:49:27 【问题描述】:

我尝试进行 cURL 身份验证,但我的 SSL 证书有问题。

我有这个代码:

$username = "123";
$password = "123";
$host = "https://api.shipnow.com.ar/users/authentication";

$headers = array(
    'Content-Type:application/json',
    'Authorization: Basic '. base64_encode("$username:$password") // <---
);

$process = curl_init($host);
curl_setopt($process, CURLOPT_HTTPHEADER, $headers);
curl_setopt($process, CURLOPT_HEADER, 1);
curl_setopt($process, CURLOPT_TIMEOUT, 30);
curl_setopt($process, CURLOPT_POST, 1);
curl_setopt($process, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($process, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($process, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($process, CURLOPT_CAINFO, '/cacert.pem');
curl_setopt($process, CURLOPT_CAPATH, '/cacert.pem');
$return = curl_exec($process);
$error = curl_error($process);
curl_close($process);

var_dump($error);

但是把这个给我:

错误设置证书验证位置: CA 文件:/cacert.pem CApath:/cacert.pem

我从这个链接下载 cacert.pem:

https://curl.haxx.se/docs/caextract.html

我把它放在我的项目文件夹中,在 index.php 旁边

有人知道如何解决这个问题吗?

问候,

【问题讨论】:

你想用那个证书做什么?为什么需要它? 【参考方案1】:

可能文件不存在。你能试试这个代码并检查文件吗?

$username = "123";
$password = "123";
$host = "https://api.shipnow.com.ar/users/authentication";

$headers = array(
    'Content-Type:application/json',
    'Authorization: Basic '. base64_encode("$username:$password") // <---
);

// Check File
if(!file_exists('/cacert.pem')) die('File not exists.');

$process = curl_init($host);
curl_setopt($process, CURLOPT_HTTPHEADER, $headers);
curl_setopt($process, CURLOPT_HEADER, 1);
curl_setopt($process, CURLOPT_TIMEOUT, 30);
curl_setopt($process, CURLOPT_POST, 1);
curl_setopt($process, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($process, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($process, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($process, CURLOPT_CAINFO, '/cacert.pem');
curl_setopt($process, CURLOPT_CAPATH, '/cacert.pem');
$return = curl_exec($process);
$error = curl_error($process);
curl_close($process);

var_dump($error);

【讨论】:

嗨,是的,这让我知道该文件不存在。我需要把这个文件放在哪里? 将文件名/cacert.pem 替换为cacert.pem。请试试这个。我认为路径是错误的。

以上是关于带有 SSL 的 cURL 返回我验证位置的主要内容,如果未能解决你的问题,请参考以下文章

libcurl证书验证失败

使用带有 SSL 证书的 PHP cURL 时出错

CurlException: [curl] 51: SSL: 证书验证失败

如何解决 cURL 错误 60:Facebook 身份验证时 Laravel 5 中的 SSL 证书

如何禁用 cURL SSL 证书验证 [重复]

验证 curl 是不是使用 TLS