web-dev-qa-db-fra.com

cURL nécessite CURLOPT_SSL_VERIFYPEER = FALSE

J'utilisais cURL sur mon hôte local depuis le plus longtemps et tout à coup, j'ai remarqué que cela ne fonctionnait plus sauf si je définissais explicitement l'option, CURLOPT_SSL_VERIFYPEER = FALSE.

Je ne sais pas comment/quand cela a changé, mais j'utilise NGINX et PHP et je peux vérifier que ce n'est pas un problème spécifique à un hôte spécifique demandé. Je reçois des réponses vides de https://site1.com et https://different-site.com.

Quelqu'un a des pensées?

18
tim peterson

Grâce aux suggestions de Dave Chen, j'ai réalisé que j'avais dû égarer mon certificat. Le problème est résolu par ce certificat qui est fourni par le créateur de cURL (extrait de Mozilla): https://curl.haxx.se/ca/cacert.pem

Donc, après avoir téléchargé ce fichier cacert.pem dans votre projet, en PHP vous pouvez maintenant faire ceci:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, TRUE);
curl_setopt($ch, CURLOPT_CAINFO, "/path/to/cacert.pem");

Alternativement, cela peut être défini globalement en ajoutant ce qui suit à votre php.ini

curl.cainfo=/path/to/cacert.pem
35
tim peterson

Si vous utilisez WampServer, notez ceci:

Vous devez mettre le chemin absolu dans CURLOPT_CAINFO, par exemple:

curl_setopt ($ch, CURLOPT_CAINFO, 'C:\wamp\www\your-project\cacert.pem')

N'utilisez pas de chemin relatif: curl_setopt ($ ch, CURLOPT_CAINFO, 'cacert.pem') car cela ne fonctionne pas.

3
LuisEduardox