Факти
Имам 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 : Това не е "универсално" решение, искам да поставям сертификатите си така, че да не се налага да свалям различни сертификати за различни сайтове.
Благодаря ти
Отговори:
1 за отговор № 1Текущите извлечения от CA Cert, предоставени от къдрица съдържат сертификатния орган на GeoTrust Global CA, който е подписал сертификата на Google за сертификат, който на свой ред подписва сертификата на YouTube, така че не би трябвало да имате проблем да използвате файла, който имате.
Въз основа на последната грешка, изглежда, че проблемът е, че сте пропуснали /
след C:
, Съобщението error setting certificate verify locations
означава, че не може да отвори или прочете файла, посочен от curl.cainfo
така че да не намери никакви сертификати изобщо.
Ако промените C:php/ext/cacert.pem
да се C:/php/ext/cacert.pem
то трябва да може да чете правилно CA файла и след това да провери сайта правилно.
-1 за отговор № 2
Най-лесният начин е да пропуснете тази проверка.
...
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_exec($curl);