PHP CURL CURLOPT_SSL_VERIFYPEER игнорируется
По какой-то причине я не могу использовать CURL с HTTPS. Все работало нормально до тех пор, пока я не обновил библиотеки скручиваний. Теперь я испытываю этот ответ при попытке выполнить запросы 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, который был предоставлен как пакетный сертификат CA для сервера, к которому я пытаюсь подключиться.
-
Измените настройки php ini с помощью curl.cainfo=cacert.pem
(файл в том же каталоге и доступен для apache)
-
Переименуйте /etc/pki/nssdb
в /etc/pki/nssdb.old
К сожалению, ни одно из вышеперечисленных способов не может решить мою проблему, и я постоянно получаю проблему с сообщением сертификата CA CA (путь? права доступа?).
И мне не нужна эта проверка в первую очередь (я знаю о проблемах безопасности).
Есть ли у кого-нибудь другие предложения?
UPDATE
После обновления до последних библиотек и повторного запуска всего окна, а не просто apache, который я делал все это, похоже, снова работает!
Ответы
Ответ 1
В соответствии с документацией: для проверки сертификата хоста или однорангового узла вам необходимо указать альтернативные сертификаты с параметром CURLOPT_CAINFO или каталог сертификата можно указать с помощью опции CURLOPT_CAPATH.
Также посмотрите на CURLOPT_SSL_VERIFYHOST: 1, чтобы проверить наличие общего имени в SSL-сертификате. 2, чтобы проверить наличие общего имени, а также убедиться, что он соответствует предоставленному имени хоста.
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
Ответ 2
У нас была такая же проблема на машине CentOS7. Отключение VERIFYHOST
VERIFYPEER
не решило проблему, у нас больше не было ошибки cURL, но ответ по-прежнему был недействительным. Выполнение wget
по той же ссылке, что и cURL, также привело к ошибке сертификата.
- > Наше решение также состояло в том, чтобы перезагрузить VPS, это решило его, и мы снова смогли выполнить запрос.
Для нас это представляло собой проблему с коррупцией памяти. Перезагрузка VPS снова перезагрузила библиотеку памяти, и теперь она работает. Поэтому, если указанное выше решение из @clover
не работает, попробуйте перезагрузить компьютер.