Не взламывает CurlException: 60 (Проверка сертификата SSL cURL) - PullRequest
8 голосов
/ 04 сентября 2010

Ошибка, которую получают многие люди с аутентификацией 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.

Ответы [ 3 ]

17 голосов
/ 04 сентября 2010

Что это означает и что означает:

Следующий код указывает cURL НЕ проверять правильность сертификатов безопасности.Следовательно, ошибка исчезает.

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

При подключении к удаленному серверу по протоколу SSL их сертификат может быть недействительным, срок его действия или не подписан распознанным центром сертификации.Обычно cURL проверяет его.

CURLOPT_SSL_VERIFYHOST:

  • 1: проверить наличие общего имени в сертификате SSL-партнера.
  • 2: проверить наличие общего имени, а также убедиться, что оно совпадает с указанным именем хоста.

CURLOPT_SSL_VERIFYPEER: FALSE, чтобы остановить CURL от проверкисертификат сверстника.Альтернативные сертификаты для проверки могут быть указаны с помощью параметра CURLOPT_CAINFO, или каталог сертификатов может быть указан с помощью параметра CURLOPT_CAPATH.CURLOPT_SSL_VERIFYHOST также может быть ИСТИНА или ЛОЖЬ, если CURLOPT_SSL_VERIFYPEER отключен (по умолчанию 2).


Как правильно включить и проверить:

Для правильной проверки нам нужноубедитесь, что представленный нам сертификат является реальным.Мы делаем это, сравнивая его с сертификатом, которому мы разумно * доверяем.

Если удаленный ресурс защищен сертификатом, выданным одним из главных ЦС, таким как Verisign, GeoTrust и др., Вы можете безопасно сравнить его с ЦС Mozilla.комплект сертификатов, который вы можете получить по http://curl.haxx.se/docs/caextract.html

Сохраните файл cacert.pem где-нибудь на вашем сервере и установите следующие параметры в вашем скрипте.

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

Если вы подключаетесь кресурс, защищенный самозаверяющим сертификатом, все, что вам нужно сделать, это получить копию сертификата в формате PEM и добавить ее в файл cacert.pem приведенного выше абзаца.

2 голосов
/ 28 ноября 2012

В моем случае я не мог использовать curl_setopt, потому что не мог редактировать классы API Facebook (условия проекта, в котором я работал).

Я решил проблему, добавив путь к cacert.pem, скачанному с http://curl.haxx.se/docs/caextract.html, в мой php.ini

[curl]
curl.cainfo = "c:\wamp\cacert.pem"
0 голосов
/ 17 апреля 2013

У меня просто была такая же проблема, и отключение одноранговой проверки не приемлемо в моем случае.Я обновил файл fa_ca_chain_bundle.crt (из gitbub Facebook ), и теперь он работает.

С уважением, Марек

...