cURL требует CURLOPT_SSL_VERIFYPEER = FALSE

Я использовал cURL на моем локальном хосте в течение самого долгого времени, и внезапно я заметил, что он больше не работает, если я явно не установил параметр CURLOPT_SSL_VERIFYPEER = FALSE .

Я понятия не имею, как это изменилось, но я использую NGINX и PHP, и я могу проверить, что это не является конкретной проблемой для конкретного запрашиваемого хоста. Я получаю пустые ответы от https://site1.com и https://different-site.com .

У кого-нибудь есть мысли?

Благодаря предложениям Дейва Чена, я понял, что должен был убрать мой сертификат. Проблема решается этим сертификатом, который предоставляется создателем cURL: http://curl.haxx.se/ca/cacert.pem

Итак, после загрузки этого файла cacert.pem в ваш проект, в PHP вы теперь можете сделать это:

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

Кроме того, это можно установить глобально, добавив следующее к вашему php.ini

 curl.cainfo=/path/to/cacert.pem 

Вы можете сделать это:

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

Другой параметр, который я включил, CURLOPT_SSL_VERIFYHOST может быть установлен в следующие целочисленные значения:

0: не проверять атрибут общего имени (CN)
1: Убедитесь, что атрибут общего имени по крайней мере существует
2: Убедитесь, что общее имя существует и что оно соответствует имени хоста сервера

Если у вас установлено значение CURLOPT_SSL_VERIFYPEER равным false, то с точки зрения безопасности на самом деле не имеет значения, к чему вы установили CURLOPT_SSL_VERIFYHOST, поскольку без проверки сертификатов сверстников сервер может использовать любой сертификат, включая самозаверяемый, который был гарантирован иметь CN, который соответствует имени хоста сервера. Поэтому этот параметр действительно релевантен, если вы включили проверку сертификата.

Если вы используете WampServer, обратите внимание на это:

Вы должны установить абсолютный путь в CURLOPT_CAINFO, например:

 curl_setopt ($ch, CURLOPT_CAINFO, 'C:\wamp\www\your-project\cacert.pem') 

Не используйте относительный путь: curl_setopt ($ ch, CURLOPT_CAINFO, 'cacert.pem'), потому что он не работает .