【发布时间】:2012-12-20 23:57:57
【问题描述】:
我正在测试一个使用curl_exec php 函数和 CA 证书的 API,但出现了问题,我有点迷茫。
我已经在我的 apache VirtualHost 上配置了 SSL,看起来还不错(打开 https:://[myVHost]... 有效)。
但是 API curl 调用给了我这个消息:
SSL peer certificate or SSH remote key was not OK
我对 SSL 不是很有经验,所以我对造成这种情况的原因知之甚少。
更新:
这是我在我的 cURL 请求中使用的代码,我已经注释了 2 行并更改了它们的值(查看 'TODO' 行)并且以这种方式它正在工作,但这只是一个工作 arround .. .
$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);
【问题讨论】:
-
我们需要您用来发出请求的完整且完整的代码,包括 所有 正在设置的 curl 选项。另外,这是自签名证书吗?
-
已添加信息 :) 关于
self-signed certificate我不知道的问题:证书随 API ... -
您已成功确定根本原因:
CURLOPT_SSL_VERIFYHOST为 2。当设置为 2 时,curl 将验证证书是否有效,并且它是由它信任的 CA 颁发的。如果远程证书是自签名的,或者不是由它信任的 CA 颁发的,它会抱怨并给出一个错误,就像你得到的那样。如果您从第三方获得证书,则需要说服 curl 信任签署它的 CA。您说您获得了 CA 证书,对吗?你用它做了什么? -
我有
ca-certs.crtAPI 提供的文件,我只是使用文档中描述的所有内容...