it-roy-ru.com

PHP CURL CURLOPT_SSL_VERIFYPEER игнорируется

Почему-то я не могу использовать CURL с HTTPS. Все работало нормально, пока я не запустил обновление библиотек curl. Теперь я испытываю этот ответ при попытке выполнить запросы CURL: Проблема с сертификатом SSL CA (путь? Права доступа?)

Следуя предложениям, размещенным здесь по смежным вопросам, я попытался сделать следующее:

  • Отключить проверку для хоста и партнера

    curl_setopt($cHandler, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($cHandler, CURLOPT_SSL_VERIFYPEER, true);
    
  • Включите CURLOPT_SSL_VERIFYPEER и укажите cacert.pem, загруженный с http://curl.haxx.se/docs/caextract.html

    curl_setopt($cHandler, CURLOPT_SSL_VERIFYPEER, true);  
    curl_setopt($cHandler, CURLOPT_CAINFO, getcwd() . "/positiveSSL.ca-bundle");
    
  • Я также попытался сделать то же самое с positiveSSL.ca-bundle, который был предоставлен как сертификат CA комплекта для сервера, к которому я пытаюсь подключиться.

  • Отредактируйте настройки php ini с помощью curl.cainfo=cacert.pem (файл находится в том же каталоге и доступен Apache)

  • Переименуйте /etc/pki/nssdb в /etc/pki/nssdb.old

К сожалению, ни одно из перечисленного не может решить мою проблему, и я постоянно получаю сообщение о проблеме с сертификатом SSL CA (путь? Права доступа?).

И в первую очередь мне эта проверка не нужна (я знаю о проблемах безопасности).

У кого-нибудь есть другие предложения?

ОБНОВИТЬ

После обновления до последних библиотек и перезапуска всей коробки, не только Apache, который я делал, все, кажется, теперь снова работает !!!

97
Greg

Согласно документации: для проверки сертификата хоста или партнера необходимо указать альтернативные сертификаты с параметром CURLOPT_CAINFO, а каталог сертификатов можно указать с помощью параметра CURLOPT_CAPATH.

Также посмотрите на CURLOPT_SSL_VERIFYHOST:

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

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
206
clover

У нас была такая же проблема на компьютере с CentOS7. Отключение VERIFYHOSTVERIFYPEER не решило проблему, у нас больше не было ошибки cURL, но ответ по-прежнему был недействительным. Выполнение wget по той же ссылке, что и cURL, также приводило к ошибке сертификата.

-> Нашим решением также была перезагрузка VPS, это решило проблему, и мы смогли снова выполнить запрос.

Для нас это казалось проблемой повреждения памяти. Перезагрузка VPS снова загрузила библиотеку в память, и теперь она работает. Поэтому, если приведенное выше решение из @clover не работает, попробуйте перезагрузить компьютер.

1
Rvanlaak