факты
У меня есть 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);