209 votes

HTTPS et SSL3_GET_SERVER_CERTIFICATE : la vérification du certificat a échoué, le CA est OK.

J'utilise XAMPP pour le développement. Récemment, j'ai mis à niveau mon installation de xampp d'une ancienne version à la 1.7.3.

Maintenant, lorsque je curle des sites HTTPS, j'obtiens l'exception suivante

Fatal error: Uncaught exception 'RequestCore_Exception' with message 'cURL resource: Resource
    id #55; cURL error: SSL certificate problem, verify that the CA cert is OK. Details:
    error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed (60)'

Tout le monde suggère d'utiliser certaines options curl spécifiques du code PHP pour résoudre ce problème. Je pense que cela ne devrait pas être le cas. Parce que je n'ai pas eu de problème avec mon ancienne version de XAMPP et cela s'est produit seulement après l'installation de la nouvelle version.

J'ai besoin d'aide pour déterminer quels changements de paramètres dans mon installation PHP, Apache, etc. peuvent résoudre ce problème.

293voto

C'est un problème assez courant sous Windows. Il suffit de définir cacert.pem à curl.cainfo .

Depuis PHP 5.3.7, vous pouvez le faire :

  1. télécharger http://curl.haxx.se/ca/cacert.pem et le sauvegarder quelque part.
  2. mise à jour php.ini -- ajoutez curl.cainfo = "PATH_TO/cacert.pem"

Sinon, vous devrez effectuer les opérations suivantes pour chaque ressource cURL :

curl_setopt ($ch, CURLOPT_CAINFO, "PATH_TO/cacert.pem");

145voto

Marc B Points 195501

curl avait l'habitude d'inclure une liste d'autorités de certification acceptées, mais ne fournit plus AUCUN certificat d'autorité de certification. Donc, par défaut, il rejette tous les certificats SSL comme étant invérifiables.

Vous devrez obtenir le certificat de votre autorité de certification et pointer Curl dessus. Plus de détails sur le site de cURLS Détails sur les certificats SSL pour serveurs .

85voto

Chris Dutrow Points 8662

Attention : cela peut introduire des problèmes de sécurité contre lesquels SSL est conçu pour vous protéger.

Mais une solution très simple qui a fonctionné pour moi a été d'appeler :

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

avant d'appeler :

curl_exec():

dans le fichier php.

Je crois que cela désactive toute vérification des certificats SSL.

55voto

Deepak Oberoi Points 408

Source : http://ademar.name/blog/2006/04/curl-ssl-certificate-problem-v.html

Curl : Problème de certificat SSL, vérifier que le CA cert est OK

07 avril 2006

Lorsque vous ouvrez une url sécurisée avec Curl, vous pouvez obtenir l'erreur suivante :

Problème de certificat SSL, vérifiez que le certificat de l'autorité de certification est correct.

Je vais vous expliquer pourquoi cette erreur et ce que vous devez faire pour y remédier.

Le moyen le plus simple de se débarrasser de cette erreur serait d'ajouter les les deux lignes suivantes à votre script . Cette solution pose un risque de sécurité sécurité.

//WARNING: this would prevent curl from detecting a 'man in the middle' attack
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0); 

Voyons ce que font ces deux paramètres. Je cite le manuel.

CURLOPT_SSL_VERIFYHOST : 1 pour vérifier l'existence d'un nom commun dans le certificat SSL du pair. 2 pour vérifier l'existence d'un nom commun et vérifier également qu'il correspond au nom d'hôte fourni.

CURLOPT_SSL_VERIFYPEER : FALSE pour empêcher CURL de vérifier le certificat de l'homologue. D'autres certificats à vérifier peuvent être spécifiés être spécifiés avec l'option CURLOPT_CAINFO ou un répertoire de certificats peut être spécifié avec l'option CURLOPT_CAPATH. CURLOPT_SSL_VERIFYHOST peut aussi avoir besoin d'être TRUE ou FALSE si CURLOPT_SSL_VERIFYPEER est désactivé (la valeur par défaut est 2). Réglage de CURLOPT_SSL_VERIFYHOST à 2 (c'est la valeur par défaut) permet de garantir que le certificat qui vous est présenté a un "nom commun" correspondant à l'URN correspondant à l'URN que vous utilisez pour accéder à la ressource distante. Il s'agit d'une un contrôle sain, mais il ne garantit pas que votre programme n'est pas trompé. ne soit pas trompé.

L'homme du milieu

Votre programme pourrait être induit en erreur en parlant à un autre serveur à la place. Ceci peut être réalisé à travers plusieurs mécanismes, comme le dns ou le arp poisoning (c'est une histoire pour un autre jour). L'intrus peut également signer lui-même un certificat avec le même "nom de domaine" que votre programme que votre programme attend. La communication serait toujours cryptée mais vous mais vous donneriez vos secrets à un imposteur. Ce type d'attaque est appelé "man in the middle".

Vaincre l'homme du milieu

Eh bien, nous avons besoin de vérifier que le certificat qui nous est présenté est bien réel. Nous le faisons en le comparant à un certificat auquel nous avons raisonnablement* confiance.

Si la ressource distante est protégée par un certificat émis par l'une des principales principales autorités de certification comme Verisign, GeoTrust et autres, vous pouvez comparer en toute sécurité. avec le paquet de certificats CA de Mozilla que vous pouvez obtenir à partir de http://curl.haxx.se/docs/caextract.html

Sauvegarder le fichier cacert.pem quelque part dans votre serveur et définissez les les options suivantes dans votre script.

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

pour toutes les informations ci-dessus Le crédit va à : http://ademar.name/blog/2006/04/curl-ssl-certificate-problem-v.html

4voto

madRai Points 39

Parfois, si l'application que vous essayez de contacter a des certificats auto-signés, le cacert.pem normal de http://curl.haxx.se/ca/cacert.pem ne résout pas le problème.

Si vous êtes sûr de l'url du point de terminaison du service, cliquez dessus dans le navigateur, enregistrez le certificat manuellement au format "X 509 certificate with chain (PEM)". Pointez ce fichier de certificat avec le fichier

curl_setopt ($ch, CURLOPT_CAINFO, "pathto/{downloaded certificate chain file}");

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X