Доброго времени суток!
Есть сервис (API с ограниченным доступом), IP адрес защищен Cloudflare. Мне известен реальный IP адрес сервера и для предотвращения разных проблем (Cloudflare имеет привычку блокировать автоматические запросы когда не нужно) я обращаюсь к реальному IP напрямую (прописал в /etc/hosts).
В браузере все открывается нормально (пропустить ошибку проверки сертификата и сайт открылся). Скрипт на PHP начал выдавать какую-то ерунду.
SSL read: error:00000000:lib(0):func(0):reason(0), errno 104
Универсальное решение всех проблем с сертификатами при подобных манипуляциях
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
не дает ожидаемого результата. Ранее на сервере стоял сертификат Let’s Encrypt (валидный) и IP адрес иногда менялся на Cloudflare, иногда защита была отключена. Сейчас сертификат хоста Cloudflare Origin Certificate подписанный Cloudflare Origin SSL Certificate Authority - разница только в этом. Wget на той же машине успешно загружает robots.txt с IP адреса, прописанного в hosts (с –no-check-certificate, естественно). Проверялось с 2 разных машин, т.о. дело не в локальных настройках.
Как заставить cURL это съесть?
И небольшое уточнение. Проблема возникает только при использовании cURL на PHP, т.к. команда вида
curl --http1.1 -vvv --insecure "https://hostname/api/" -d 'param1=val1¶m2={json:true}'
отрабатывает относительно успешно (ответ API не все параметры указаны, есть какие-то проблемы с парсингом json, переданным из консоли). PHP скрипт заведомо рабочий, несколько лет уже используется. Сейчас в него добавлен вывод HTTP заголовков.