使用捆绑信息找不到或没有找到证书颁发机构

The*_*ask 8 php facebook

我开始使用facebook API了.我从facebook下载了示例代码,配置了我的appID和密钥.

<?php
   require '../src/facebook.php';

// Create our Application instance (replace this with your appId and secret).
$facebook = new Facebook(array(
  'appId'  => '...',
  'secret' => '....',
));

// Get User ID
$user = $facebook->getUser();

if ($user) {
  try {
    // Proceed knowing you have a logged in user who's authenticated.
    $user_profile = $facebook->api('/me');
  } catch (FacebookApiException $e) {
    error_log($e);
    $user = null;
  }
}

// Login or logout url will be needed depending on current user state.
if ($user) {
  $logoutUrl = $facebook->getLogoutUrl();
} else {
  $loginUrl = $facebook->getLoginUrl();
}

// This call will always work since we are fetching public data.
$naitik = $facebook->api('/naitik');

?>
Run Code Online (Sandbox Code Playgroud)

在localhost上,脚本工作没有错误.但在主机上我收到以下错误:

使用捆绑信息找不到或没有找到证书颁发机构

.CRT文件被成功上传

有人可能会指出我的错误吗?提前致谢.

小智 20

将CURL中的选项设置为指向证书文件

此选项将告诉CURL您的fb_ca_chain_bundle.crt文件与脚本位于同一文件夹中.

Facebook::$CURL_OPTS[CURLOPT_CAINFO] = getcwd().'/fb_ca_chain_bundle.crt';
Run Code Online (Sandbox Code Playgroud)

在base_facebook.php第844行中,curl_exec失败并生成错误.然后脚本设置:

curl_setopt($ch, CURLOPT_CAINFO,
              dirname(__FILE__) . '/fb_ca_chain_bundle.crt');
Run Code Online (Sandbox Code Playgroud)

然后再试一次.

第二次一切都很好,没有问题,它只会弄乱你的日志

不使用

Facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYPEER] = false;

或者一个中间人将能够拦截你的电话!


小智 5

禁用SSL安全功能

虽然我不认识到确切的错误消息,但通过PHP SDK(以及Curl)与Facebook通信时的SSL问题很常见.你有没有试过这样的事情?

Facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYPEER] = false;
Run Code Online (Sandbox Code Playgroud)

这将禁用SSL"验证对等"安全功能,以便它停止生成错误消息.

  • 这个答案是通过断开连接功能来解决错误.该功能是有原因的,原因是安全性.关闭安全功能以纠正错误配置的证书文件位置是完全不可接受的.-1,标记. (2认同)