Intereting Posts
Исключение двойных кавычек в php Использование переменной PHP $ _SESSION для хранения больших символов данных Каков наилучший способ уменьшить количество запросов, когда у класса DAO есть методы, которые используют один и тот же результат? Как получить заголовки HTTP-ответа после запроса POST в PHP? Создание рекурсивной функции дерева деревьев Форма всегда отправляется как GET даже с методом POST Проверка URL-адреса с протоколом или без него Как настроить пользовательский глобальный из .htaccess Разработка Facebook – логин Не удалось отобразить последнее время обновления таблицы mySQL. move_uploaded_file () не удалось открыть поток: нет такого файла или каталога Как обновить базу данных после обновления страницы в javaScript? как создать уникальный код отслеживания MySQL Выберите JOIN 3 Tables Как написать маршруты маршрутизации для субдомена в Zend Framework в файле INI маршрутизации?

Ошибка сертификата SSL в cURL

факты

У меня есть Apache / 2.4.27 (Win64) PHP / 7.2.0beta3 на ноутбуке Win 10. Я хочу реализовать cURL. Это мой код

$curl = curl_init(); curl_setopt($curl, CURLOPT_URL, 'https://www.youtube.com'); curl_exec($curl); if (curl_errno ( $curl )) { echo curl_error ( $curl ); curl_close ( $curl ); } 

который генерирует ошибку SSL certificate problem: unable to get local issuer certificate . Поэтому я загрузил сертификаты из https://curl.haxx.se/ca/cacert.pem . Взял файл cacert.pem, поместил его в папку PHP и отредактировал файл php.ini как этот curl.cainfo = C:php/ext/cacert.pem .

проблема

Теперь я получаю эту error setting certificate verify locations: CAfile: C:php/ext/cacert.pem CApath: none . Я googled, и единственным решением, которое я нашел, является то, что я должен загрузить файл .crt с сайта, который я хочу использовать cURL, и включить его в свой cURL, например curl_setopt($curl, CURLOPT_CAINFO, "C:/wamp64/www/GIAG2.crt"); ,

Проблема 1.1 : Я не знаю, как загрузить файл .crt поэтому я могу включить его в свой код, как в приведенном выше примере.

Проблема 1.2 . Это не «универсальное» решение, поэтому я хочу установить свои сертификаты таким образом, что мне не нужно загружать разные сертификаты для разных сайтов.

спасибо

Текущие выдержки CA Cert, предоставленные cURL, содержат сертификат центра сертификации GeoTrust Global CA, который подписывает сертификат CA от Google, который, в свою очередь, подписывает сертификат YouTube, поэтому у вас не должно возникнуть проблемы с использованием файла, который у вас есть.

Основываясь на последней ошибке, похоже, что проблема заключается в том, что вам не хватало / после C: error setting certificate verify locations сообщения указывает, что оно не может открыть или прочитать файл, указанный curl.cainfo чтобы он не обнаружил никаких сертификатов вообще.

Если вы измените C:php/ext/cacert.pem на C:/php/ext/cacert.pem он должен будет правильно прочитать файл CA, а затем проверить сайт должным образом.

Самый простой способ – пропустить эту проверку.

 ... curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_exec($curl);