我正在测试一个使用 curl_exec
php 函数和 CA 证书的 API,但出了点问题,我有点迷茫。
我已经在我的 apache VirtualHost 上配置了 SSL,看起来没问题(打开 https:://[myVHost]
... 有效)。
但是 API curl 调用返回了这条消息:
SSL 对等证书或 SSH 远程 key 不正确
我对 SSL 不是很有经验,所以我不知道这是什么原因。
更新:
这是我在我的 cURL 请求中使用的代码,我注释了 2 行并更改了它们的值(查看“TODO”行)并且以这种方式它正在工作,但这只是一个工作范围.. .
$opts[CURLOPT_URL] = $url;
$opts[CURLOPT_RETURNTRANSFER] = true;
$opts[CURLOPT_CONNECTTIMEOUT] = 50;
$opts[CURLOPT_TIMEOUT] = 100;
$headers = array(
'Accept: application/json',
"User-Agent: APIXXX-PHP-Client");
$opts[CURLOPT_HTTPHEADER] = $headers;
$opts[CURLOPT_USERPWD] = $env->getApiKey() . ':';
if (certificatePresent()) {
// $opts[CURLOPT_SSL_VERIFYPEER] = true;
// $opts[CURLOPT_SSL_VERIFYHOST] = 2;
// TODO: SET IT BACK
$opts[CURLOPT_SSL_VERIFYPEER] = 0;
$opts[CURLOPT_SSL_VERIFYHOST] = 0;
$opts[CURLOPT_CAINFO] = $path
}
curl_setopt_array($curl, $opts);
$response = curl_exec($curl);
最佳答案
您可能正在使用自签名 SSL 证书,当设置了 CURLOPT_SSL_VERIFYPEER 选项时,该证书不会通过。
有两种解决方法:
- 设置有效的 SSL 证书。
- 在 Curl 中禁用 SSL 验证。 ( add --insecure option )
如果您禁用验证,您将无法确定您是否真的在与您的主机通信。 所以这取决于您需要的安全级别。
关于php - SSL 对等证书或 SSH 远程 key 不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14192837/