Facebook Connect PHP SDK Curl Peer Ошибка проверки SSL

Я интегрирую Facebook Connect в наше приложение. Я думал, что использую официальный SDK Facebook по адресу http://github.com/facebook/php-sdk. это лучший способ, как это рекламируется на вики FB Developers.

Но мне не удалось заставить его работать. Исследуя код API, я вспомнил свой предыдущий опыт с параметром CURLOPT_SSL_VERIFYPEER. Этот параметр имеет значение по умолчанию "true", а в API он не задан, неявно устанавливается как true.

Я изменил параметр CURLOPT_SSL_VERIFYPEER на false, и проблема решена. Используя его как истину, я могу получить от Graph API для запроса /get/me «логическое значение (false)», однако установка для параметра CURLOPT_SSL_VERIFYPEER значения false того же запроса curl дала мне пользовательский объект json.

Здесь я хочу спросить, каковы побочные эффекты использования Facebook PHP SDK, поскольку для параметра «CURLOPT_SSL_VERIFYPEER» установлено значение false. В более общем смысле, имеет ли смысл запускать сеанс curl без одноранговой проверки.


person Lashae    schedule 20.05.2010    source источник


Ответы (2)


Что-то не так с вашей установкой PHP. Скорее всего, у вас нет промежуточного сертификата ENTRUST, необходимого для проверки SSL-сертификата. Это их цепочка сертификатов,

Certificate chain
 0 s:/C=US/ST=California/L=Palo Alto/O=Facebook, Inc./CN=*.facebook.com
   i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert High Assurance CA-3
 1 s:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert High Assurance CA-3
   i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert High Assurance EV Root CA
 2 s:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert High Assurance EV Root CA
   i:/C=US/O=Entrust.net/OU=www.entrust.net/CPS incorp. by ref. (limits liab.)/OU=(c) 1999 Entrust.net Limited/CN=Entrust.net Secure Server Certification Authority

Установка для CURLOPT_SSL_VERIFYPEER значения false просто отключает проверку сертификата. Вы не должны делать это в производстве.

person ZZ Coder    schedule 20.05.2010
comment
Почему я не должен отключать это в производстве с точки зрения безопасности? И еще один, как я могу проверить, какой сертификат. в цепочке мне не хватает, а как в цепочке установить? - person Lashae; 22.05.2010
comment
Если вы не проверяете одноранговый узел (сервер), у вас нет доказательств того, что он является предполагаемым получателем ваших запросов. Это может быть кто угодно, возможно, хакер, записывающий ваши пароли или токены OAuth. Подробнее см. на странице tehuber.com/article.php?story=20090125114837262. - person David Snabel-Caunt; 18.10.2010

Попробуйте это, это решило проблему для меня

Facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYPEER] = ложь; Facebook::$CURL_OPTS[CURLOPT_SSL_VERIFYHOST] = 2;

person Mo J. Mughrabi    schedule 18.09.2010
comment
Это просто не решение и является наихудшей практикой безопасности - person David Snabel-Caunt; 18.10.2010
comment
@david, что было бы лучше с точки зрения безопасности? - person Mo J. Mughrabi; 26.11.2010
comment
tehuber.com/article.php?story=20090125114837262 может вам помочь. По сути, если вы не проверяете пир, вы уязвимы для атак «человек посередине», когда кто-то может выдать себя за конечную точку, притворяясь сервером Facebook. - person David Snabel-Caunt; 30.11.2010