php - 为什么 cUrl 无法通过 HTTPS 下载,除非 CURLOPT_SSL_VERIFYPEER 设置为 "false"?

标签 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 Storage,并以 https://myaccount.blob.core.windows.net 开头,因此我认为服务器 SSL 证书应该没有问题.

造成这种行为的原因是什么?

最佳答案

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

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

关于php - 为什么 cUrl 无法通过 HTTPS 下载,除非 CURLOPT_SSL_VERIFYPEER 设置为 "false"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11135952/

相关文章:

cURL 调用的页面中的 PHP header 重定向问题

php - 在 PHP eval() 中调用用户定义的函数

php - PHP SQl查询中的可捕获 fatal error

php - 在 PHP 中使用 heredoc 有什么好处?

c# - 我在使用托管服务身份对受 AAD 保护的 Azure 应用服务进行身份验证时遇到问题

Azure 搜索 : Running Indexer for . vtt

c# - 如何升级 azure CI 以使用 c# 8.0

javascript - 如何将 Electron js 应用程序用作一个本地主机链接的网络浏览器?

php - AWS S3 cURL 超时

php - OpenSSL SSL_connect : SSL_ERROR_SYSCALL in connection to api. amazonalexa.com:443