8

多くの人がFacebook認証で得るエラーは次のとおりです。

CurlException: 60: SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

そして、それについて私が見つけることができる唯一の情報は、curlに次のコード行を追加することを提案しています。

$opts[CURLOPT_SSL_VERIFYPEER] = false;
$opts[CURLOPT_SSL_VERIFYHOST] = 2;

私はこれがうまくいくことを知っていますが、ここで何が起こっているのですか?facebook.phpをハッキングする代わりに変更できるサーバー設定/構成はありませんか。

4

3 に答える 3

17

内容と意味:

次のコードは、セキュリティ証明書が正しいことを確認しないようにcURLに指示します。したがって、エラーは消えます。

  $opts[CURLOPT_SSL_VERIFYPEER] = false;
  $opts[CURLOPT_SSL_VERIFYHOST] = 2;

SSLを使用してリモートサーバーに接続すると、証明書が無効であるか、有効期限が切れているか、認識されたCAによって署名されていない可能性があります。通常、cURLはそれをチェックします。

CURLOPT_SSL_VERIFYHOST:

  • 1:SSLピア証明書に共通名が存在するかどうかを確認します。
  • 2:共通名の存在を確認し、指定されたホスト名と一致することも確認します。

CURLOPT_SSL_VERIFYPEER: FALSEを指定すると、CURLによるピアの証明書の検証が停止されます。検証する代替証明書は、CURLOPT_CAINFOオプションを使用して指定するか、証明書ディレクトリをオプションを使用して指定できCURLOPT_CAPATHます。CURLOPT_SSL_VERIFYPEERが無効になっている場合(デフォルトは2)、CURLOPT_SSL_VERIFYHOSTもTRUEまたはFALSEである必要があります。


正しく有効化および検証する方法:

正しく検証するには、提示された証明書が実際に有効であることを検証する必要があります。これを行うには、妥当な*信頼できる証明書と比較します。

リモートリソースがVerisignやGeoTrustなどのメインCAのいずれかによって発行された証明書によって保護されている場合は、http://curl.haxx.se/docs/caextractから取得できるMozillaのCA証明書バンドルと安全に比較できます。 .html

サーバーのどこかにファイルcacert.pemを保存し、スクリプトで次のオプションを設定します。

curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, TRUE); 
curl_setopt ($ch, CURLOPT_CAINFO, "pathto/cacert.pem");

自己署名証明書で保護されているリソースに接続している場合は、PEM形式の証明書のコピーを取得し、それを上記の段落のcacert.pemに追加するだけです。

于 2010-09-04T15:03:35.003 に答える
2

私の場合、Facebook APIクラス(作業中のプロジェクトの条件)を編集できなかったため、curl_setoptを使用できませんでした。

http://curl.haxx.se/docs/caextract.htmlからダウンロードしたcacert.pemへのパスをphp.iniに追加することで、問題を解決しました。

[curl]
curl.cainfo = "c:\wamp\cacert.pem"
于 2012-11-28T09:30:36.557 に答える
0

同じ問題が発生しました。私の場合、ピア検証を無効にすることはできません。fa_ca_chain_bundle.crtファイル(Facebookのgitbubから)を更新しましたが、動作するようになりました。

よろしく、マレク

于 2013-04-17T08:39:47.780 に答える