cURL chyba 60 - SSL certificate problem

PHP, Windows

V základním nastavení XAMPPu a čisté instalaci PHP může při cURL požadavku na zabezpečený web vyskočit chyba 60, neboli problém SSL certifikátu, Řešení je však nasnadě a za pár minut vše funguje.

cURL chyba 60 - SSL certificate problem

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