【问题标题】:Cannot identify local issuer无法识别本地发行人
【发布时间】:2024-01-20 12:36:01
【问题描述】:

我收到此错误:

SSL problem: can't identify local issuer

一旦我调用该函数来保存图像或检索用户的 Facebook 图像:

file_get_contents()

我所做的是:

  • 我的网站在 Azure *.azurewebsites.com 上运行
  • 我添加了从 GoDaddy 购买的自定义域和 ssl 证书
  • 我在我的 Mac 上使用 OpenSSL 创建了证书签名请求 (CSR)(GoDaddy 要求的)
  • 用它签名并下载它以获得.p7b文件和.crt文件
  • 我将 .crt 文件添加到 Azure,一切正常,我的自定义域现在旁边有锁

所以在这些步骤之后,用 Facebook 登录也出现了这个错误,所以我做了一个临时修复:

curl_setopt($rest, CURLOPT_SSL_VERIFYPEER, false);

当然不建议这样做,但它允许我测试网站的其余部分。错误仍然发生,但仅在调用 file_get_contents() 时发生。我已经根据我所看到的情况尝试了这些修复:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_CAINFO, getcwd() . "/cacert/cacert.pem");

但没有骰子。有人可以准确解释错误的含义并与之抗争吗?那简直太好了。而且,这可能是由于使用 OpenSSL 创建了我的证书签名请求......不确定。请确认。

【问题讨论】:

  • 为什么在获取文件时使用 ssl pem?为什么不使用 https:// 它应该已经安装在服务器上。我想知道你为什么要这样做?
  • 所以我使用 Parse Server PHP SDK,我只是把 curl_setopt($ch, CURLOPT_CAINFO, getcwd() . "/cacert/cacert.pem");在 ParseClient.php 中,当我获取文件时,我正在执行 file_get_contents( $_FILES['userImg']['tmp_name'] ) 或 file_get_contents('graph.facebook.com' . $user['id'] . '/picture? type=large&return_ssl_resources=1')

标签: php ssl curl openssl ssl-certificate


【解决方案1】:

curl_setopt flags 仅适用于您传递给这些调用的处理程序。 file_get_contents 不知道任何 CURLOPT_SSL_VERIFYPEERCURLOPT_SSL_VERIFYHOST 标志。

file_get_contents 更改为 curl 调用。

【讨论】:

  • 所以你想让我创建另一个函数来模仿 file_get_contents?
  • 不创建,使用现有的。
  • 你能详细说明一下吗?我对php和curl不太熟悉
最近更新 更多