j'utilise XAMPP pour le développement. Récemment, j'ai mis à niveau mon installation de xampp d'une ancienne version vers 1.7.3.
Maintenant, lorsque je recourbe les sites compatibles HTTPS, j'obtiens l'exception suivante
Erreur fatale: exception non interceptée 'RequestCore_Exception' avec le message 'ressource cURL: ID de ressource # 55; Erreur cURL: problème de certificat SSL, vérifiez que le certificat CA est OK. Détails: erreur: 14090086: routines SSL: SSL3_GET_SERVER_CERTIFICATE: échec de la vérification du certificat (60) '
Tout le monde suggère d'utiliser certaines options de 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 eu aucun problème avec mon ancienne version de XAMPP et ce n'est arrivé qu'après l'installation de la nouvelle version.
J'ai besoin d'aide pour comprendre quels paramètres changent dans mon installation PHP, Apache, etc. peut résoudre ce problème.
CURLOPT_SSL_VERIFYPEER
-> false). Vous pouvez soit ajouter le certificat CA du site avec lequel vous essayez de faire du SSL, soit désactiver la vérification CA. Ce sont les deux seules options disponibles.CURLOPT_SSL_VERIFYPEER
pourfalse
vaincre le but de l'utilisation de SSL.C'est un problème assez courant dans Windows. Il vous suffit de vous mettre
cacert.pem
àcurl.cainfo
.Depuis PHP 5.3.7, vous pouvez faire:
php.ini
- ajoutez curl.cainfo = "PATH_TO / cacert.pem"Sinon, vous devrez effectuer les opérations suivantes pour chaque ressource cURL:
la source
2.
, vous devez ajouter la variable à deuxphp.ini
fichiers distincts . Voir stackoverflow.com/a/25706713/1101095Avertissement: cela peut introduire des problèmes de sécurité contre lesquels SSL est conçu, ce qui rend l'ensemble de votre base de code non sécurisé. Cela va à l'encontre de toutes les pratiques recommandées.
Mais une solution vraiment simple qui a fonctionné pour moi était d'appeler:
avant d'appeler:
dans le fichier php.
Je crois que cela désactive toute vérification des certificats SSL.
la source
Source: http://ademar.name/blog/2006/04/curl-ssl-certificate-problem-v.html
pour tous les crédits d'informations ci-dessus: http://ademar.name/blog/2006/04/curl-ssl-certificate-problem-v.html
la source
Les solutions ci-dessus sont excellentes, mais si vous utilisez WampServer, vous trouverez peut-être que la définition de la
curl.cainfo
variable dansphp.ini
ne fonctionne pas.J'ai finalement trouvé que WampServer avait deux
php.ini
fichiers:Le premier est apparemment utilisé lorsque les fichiers PHP sont invoqués via un navigateur Web, tandis que le second est utilisé lorsqu'une commande est invoquée via la ligne de commande ou
shell_exec()
.TL; DR
Si vous utilisez WampServer, vous devez ajouter le
curl.cainfo
ligne aux deuxphp.ini
fichiers.la source
Pour l'amour de tout ce qui est saint ...
Dans mon cas, j'ai dû régler la
openssl.cafile
variable de configuration PHP sur le chemin du fichier PEM.J'espère qu'il est très vrai qu'il existe de nombreux systèmes où la configuration
curl.cainfo
dans la configuration de PHP est exactement ce qui est nécessaire, mais dans l'environnement avec lequel je travaille, qui est le eboraas / laravel conteneur docker , qui utilise Debian 8 (jessie) et PHP 5.6, définir cette variable n'a pas fait l'affaire.J'ai remarqué que la sortie de
php -i
ne mentionnait rien sur ce paramètre de configuration particulier, mais elle contenait quelques lignesopenssl
. Il y a à la fois une optionopenssl.capath
et uneopenssl.cafile
option, mais le simple fait de définir la deuxième boucle autorisée via PHP pour enfin être compatible avec les URL HTTPS.la source
Parfois, si l'application que vous essayez de contacter possède 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 via le navigateur, enregistrez le certificat manuellement au format "Certificat X 509 avec chaîne (PEM)". Pointez ce fichier de certificat avec le
la source
J'ai la même erreur sur Amazon AMI Linux.
J'ai résolu en définissant curl.cainfo sur /etc/php.d/curl.ini
https://gist.github.com/reinaldomendes/97fb2ce8a606ec813c4b
Ajout octobre 2018
Sur Amazon Linux v1, éditez ce fichier
Pour ajouter cette ligne
la source
Lorsque vous définissez les options de boucle pour CURLOPT_CAINFO, n'oubliez pas d'utiliser des guillemets simples, l'utilisation de guillemets doubles ne provoquera qu'une autre erreur. Votre option devrait donc ressembler à:
De plus, dans votre fichier php.ini, le paramètre doit être écrit comme suit: (notez mes doubles guillemets)
Je le mets directement sous la ligne qui dit ceci:
extension=php_curl.dll
(À des fins d'organisation uniquement, vous pouvez le placer n'importe où dans votre
php.ini
, je le mets juste à côté d'une autre référence curl, donc lorsque je recherche à l'aide du mot clé curl, je peux trouver les deux références curl dans une zone.)la source
Je me suis retrouvé ici en essayant d'obtenir GuzzleHttp (php + apache sur Mac) pour obtenir une page de www.googleapis.com.
Voici ma dernière solution au cas où cela aiderait quelqu'un.
Regardez la chaîne de certificats pour le domaine qui vous donne cette erreur. Pour moi, c'était googleapis.com
Vous récupérerez quelque chose comme ceci:
Remarque: J'ai capturé cela après avoir résolu le problème, la sortie de votre chaîne peut sembler différente.
Ensuite, vous devez regarder les certificats autorisés dans php. Exécutez phpinfo () dans une page.
Recherchez ensuite le fichier de certificat chargé à partir de la sortie de la page:
Il s'agit du fichier que vous devrez corriger en y ajoutant le ou les certificats appropriés.
Vous devez essentiellement ajouter les «signatures» de certificat correctes à la fin de ce fichier.
Vous pouvez en trouver certains ici: vous devrez peut-être rechercher sur Google / d'autres personnes dans la chaîne si vous en avez besoin.
Ils ressemblent à ceci:
( Remarque: il s'agit d'une image afin que les gens ne copient / collent pas simplement les certificats à partir de stackoverflow )
Une fois que les bons certificats sont dans ce fichier, redémarrez apache et testez.
la source
Vous pouvez essayer de réinstaller le
ca-certificates
package ou autoriser explicitement le certificat en question comme décrit ici .la source
La solution est très simple! Mettez cette ligne avant
curl_exec
:Pour moi ça marche.
la source