Při spuštění skriptu níže se vypíše chyba 60 - SSL certificate problem: unable to get local issuer certificate. Důvod chyby je jasný, cURL nepozná, je-li certifikát webu vystaven věrohodnou certifikační autoritou či nikoli.
$curl = curl_init(); curl_setopt($curl, CURLOPT_URL, "https://www.google.com/robots.txt"); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); if(($data = curl_exec($curl)) !== false){ echo $data; }else{ echo curl_errno($curl)." - ".curl_error($curl); } curl_close($curl);
Řešení 1 - ignorování chyby
Prvním jednodušším, ale méně správným, řešením je nastavit cURL tak, aby se certifikát nepokoušel ověřit a prostě ho bral, jak je. Stačí tedy před samotný curl_exec vložit následující řádek.
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER,false);
Hodně knihoven cURL vnitřně používá a předat mu hodnotu pro ignorování neověřeného certifikátu může být dosti složité. V případě některých knihoven dokonce i nemožné.
Řešení 2 - stažení balíku
Lepším řešením je stažení balíku certifikátů důvěryhodných certifikačních autorit (CA), uložit a nakonfigurovat PHP tak, aby používal pro ověření tento balík. Soubor ve formátu PEM je možné stáhnout na stránce curl.haxx.se/docs/caextract.html.
Ten stačí uložit někam do adresáře instalace XAMPP/PHP, osobně jej mám ve složce C:\xampp\php\extras\ssl\. Následně už stačí pouze vložit do adresu k balíku do souboru php.ini.
[curl] curl.cainfo ="C:\xampp\php\extras\ssl\cacert.pem" [openssl] openssl.cafile="C:\xampp\php\extras\ssl\cacert.pem"
Nyní stačí restartovat Apache a vše bude fungovat.
S osobními zkušenosti se můžete podělit se čtenáři v komentářích.
K tomuto článku již není možné přidávat další komentáře