我正在测试一个使用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‘行),这样它就可以工作了,但是这只是一个工作.
$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);发布于 2013-12-29 13:18:45
您可能使用的是自签名SSL认证证书,在设置CURLOPT_SSL_VERIFYPEER选项时它不会通过。
有两种解决办法:
如果禁用验证,则无法确定是否真的与主机进行通信。所以这取决于你需要的安全级别。
发布于 2017-09-21 09:50:13
除了CURLOPT_SSL_VERIFYPEER之外,还有另外两个可能更改为false/0的设置
CURLOPT_SSL_VERIFYHOST
CURLOPT_SSL_VERIFYSTATUS请注意,您应该修复SSL证书&设置,而不是禁用安全性!
发布于 2017-03-08 13:45:19
虽然我是在回复一个旧帖子,但我认为它会对新观众有所帮助-
您可以通过添加
$opts[CURLOPT_VERBOSE] = 1对于自签名证书,客户端可以使用IP地址与服务器连接,因为主机名在DNS缓存中不可用。在这种情况下,服务器证书的公共名称(CN)需要与server匹配(在生成服务器证书时将IP地址作为公共名称)。当您正确地执行此操作时,您可以看到以下消息:
通用名称: 192.168.0.1 (匹配)
这里的例子是192.168.0.1。
https://stackoverflow.com/questions/14192837
复制相似问题