除非CURLOPT_SSL_VERIFYPEER设置为“false”,为什么cUrl无法通过HTTPS下载?

时间:2012-06-21 10:10:46

标签: php curl azure https

在我的PHP代码中,我尝试从以https://

开头的URL下载文件
$curlHandle = curl_init();
curl_setopt($curlHandle, CURLOPT_URL, $url);
curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($curlHandle);
curl_close($curlHandle);

$response恰好是FALSE,除非我这样做:

curl_setopt($curlHandle, CURLOPT_SSL_VERIFYPEER, false);
curl_exec()致电之前

我下载的URL来自Window Azure Blob存储,并以https://myaccount.blob.core.windows.net开头,所以我假设服务器SSL证书应该没有问题。

这种行为的原因是什么?

2 个答案:

答案 0 :(得分:4)

这是因为您没有使用被认为值得信任的CA证书配置curl,因此无法验证远程服务器证书上的签名(尽管签名很可能是有效的)。

要验证签名,您应该适当地设置CURLOPT_CAINFOCURLOPT_CAPATH

答案 1 :(得分:0)

仅供参考,Microsoft发布了一个SDK for PHP,可以为您处理所有这些内容,让您的代码更多地与Azure服务交互,而不是使用HTTP。