J'utilise WAMP sur un environnement de développement local et j'essaie de débiter une carte de crédit mais j'obtiens le message d'erreur:
Erreur cURL 60: problème de certificat SSL: impossible d'obtenir le certificat d'émetteur local
J'ai beaucoup cherché sur Google et beaucoup de gens suggèrent de télécharger ce fichier: cacert.pem , de le mettre quelque part et de le référencer dans mon php.ini. C'est la partie de mon php.ini:
curl.cainfo = "C:\Windows\cacert.pem"
Pourtant, même après avoir redémarré mon serveur plusieurs fois et changé de chemin, j'obtiens le même message d'erreur.
J'utilise WAMP des modules Apache et ai le ssl_module activé. Et à partir des extensions PGP, j'ai php_curl activé.
Toujours le même message d'erreur. Pourquoi cela se produit-il?
Maintenant, je suis ce correctif: Comment corriger l'erreur PHP CURL 60 SSL
Ce qui suggère que j'ajoute ces lignes à mes options cURL:
curl_setopt($process, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem');
curl_setopt($process, CURLOPT_SSL_VERIFYPEER, true);
Où puis-je ajouter des options à mon cURL? Apparemment pas via la ligne de commande, car ma CLI ne trouve pas la commande "curl_setopt"
ÉDITER
Voici le code que j'utilise:
public function chargeStripe()
{
$stripe = new Stripe;
$stripe = Stripe::make(env('STRIPE_PUBLIC_KEY'));
$charge = $stripe->charges()->create([
'amount' => 2900,
'customer' => Input::get('stripeEmail'),
'currency' => 'EUR',
]);
dd($charge);
// echo $charge[Input::get('stripeToken')];
return Redirect::route('step1');
}
Réponses:
Solution de travail en supposant que votre Windows utilise XAMPP:
Redémarrez votre serveur web / apache
Problème résolu!
(Référence: https://laracasts.com/discuss/channels/general-discussion/curl-error-60-ssl-certificate-problem-unable-to-get-local-issuer-certificate )
la source
curl.cainfo = "C:/cacert.pem"
et j'ai également dû redémarrer mon ordinateur pour le faire fonctionner. Le redémarrage du serveur Web n'était pas suffisant. J'espère que cela aide:]curl.cainfo
(facepalm)Attention aux utilisateurs de Wamp / Wordpress / windows. J'ai eu ce problème pendant des heures et même la bonne réponse ne le faisait pas pour moi, car je modifiais le mauvais fichier php.ini parce que la question avait été répondue à XAMPP et non aux utilisateurs de WAMP, même si la question était pour WAMP.
voici ce que j'ai fait
Téléchargez l' ensemble de certificats.
Mettez-le à l'intérieur de
C:\wamp64\bin\php\your php version\extras\ssl
Assurez-vous que le fichier
mod_ssl.so
est à l'intérieur deC:\wamp64\bin\apache\apache(version)\modules
Activer
mod_ssl
danshttpd.conf
le répertoire ApacheC:\wamp64\bin\apache\apache2.4.27\conf
Activer
php_openssl.dll
dansphp.ini
. Sachez que mon problème était que j'avais deux fichiers php.ini et que je devais le faire dans les deux. Le premier peut être situé à l'intérieur de l'icône de votre barre des tâches WAMP ici.et l'autre est situé dans
C:\wamp64\bin\php\php(Version)
trouver l'emplacement des deux
php.ini
fichiers et trouver la lignecurl.cainfo =
et lui donner un chemin comme celui-cicurl.cainfo = "C:\wamp64\bin\php\php(Version)\extras\ssl\cacert.pem"
Maintenant, enregistrez les fichiers et redémarrez votre serveur et vous devriez être prêt à partir
la source
Si vous utilisez PHP 5.6 avec Guzzle, Guzzle est passé à l'utilisation de la détection automatique des bibliothèques PHP pour les certificats plutôt que de son processus ( ref ). PHP décrit les changements ici .
Découvrir où PHP / Guzzle recherche des certificats
Vous pouvez effectuer un vidage là où PHP cherche en utilisant:
Obtenir un ensemble de certificats
Pour les tests OS X, vous pouvez utiliser homebrew pour installer openssl
brew install openssl
puis utiliseropenssl.cafile=/usr/local/etc/openssl/cert.pem
dans vos paramètres php.ini ou Zend Server (sous OpenSSL).Un paquet de certificats est également disponible auprès de curl / Mozilla sur le site Web de curl: https://curl.haxx.se/docs/caextract.html
Dire à PHP où se trouvent les certificats
Une fois que vous avez un bundle, placez-le là où PHP regarde déjà (que vous avez découvert ci-dessus) ou mettez-le
openssl.cafile
à jour dans php.ini. ( En règle générale,/etc/php.ini
ou ,/etc/php/7.0/cli/php.ini
ou/etc/php/php.ini
sur Unix.)la source
openssl_get_cert_locations
, cela a facilité le débogage. On dirait que WAMP utilise un fichier ini différent pour php apache que pour php console. Dans mon cas, j'ai dû ajouteropenssl.cafile="c:/_/cacert.pem"
du php sur console. La dernière fois, lors de son utilisation via Apache, j'avais besoincurl.cainfo="c:/_/cacert.pem"
de le faire fonctionner.Guzzle, qui est utilisé par cartalyst / stripe , fera ce qui suit pour trouver une archive de certificat appropriée pour comparer un certificat de serveur:
openssl.cafile
est défini dans votre fichier php.ini.curl.cainfo
est défini dans votre fichier php.ini./etc/pki/tls/certs/ca-bundle.crt
existe (Red Hat, CentOS, Fedora; fourni par le paquet ca-certificats)/etc/ssl/certs/ca-certificates.crt
existe (Ubuntu, Debian; fourni par le paquet ca-certificats)/usr/local/share/certs/ca-root-nss.crt
existe (FreeBSD; fourni par le paquet ca_root_nss)/usr/local/etc/openssl/cert.pem
(OS X; fourni par homebrew)C:\windows\system32\curl-ca-bundle.crt
existe (Windows)C:\windows\curl-ca-bundle.crt
existe (Windows)Vous voudrez vous assurer que les valeurs des deux premiers paramètres sont correctement définies en effectuant un test simple:
Vous pouvez également essayer d'écrire le fichier aux emplacements indiqués par # 7 ou # 8.
la source
Si vous ne pouvez pas modifier php.ini, vous pouvez également pointer vers le fichier cacert.pem à partir d'un code comme celui-ci:
la source
Ce que j'ai fait a été utilisé
var_dump(openssl_get_cert_locations()); die;
dans n'importe quel script php, ce qui m'a donné les informations sur les valeurs par défaut que mon php local utilisait:Comme vous pouvez le constater, j'ai défini l'ini_cafile ou l'option ini curl.cainfo. Mais dans mon cas, curl essaierait d'utiliser le "default_cert_file" qui n'existait pas.
J'ai copié le fichier de https://curl.haxx.se/ca/cacert.pem dans l'emplacement de "default_cert_file" (c: /openssl-1.0.1c/ssl/cert.pem) et j'ai pu l'obtenir travailler.
C'était la seule solution pour moi.
la source
J'ai eu ce problème un jour à l'improviste, lorsqu'un script Guzzle (5) tentait de se connecter à un hôte via SSL. Bien sûr, je pourrais désactiver l'option VERIFY dans Guzzle / Curl, mais ce n'est clairement pas la bonne façon de procéder.
J'ai essayé tout ce qui est répertorié ici et dans des threads similaires, puis je suis finalement allé au terminal avec openssl pour tester le domaine avec lequel j'essayais de me connecter:
... et a reçu les premières lignes indiquant:
... alors que tout fonctionnait bien lorsque vous essayiez d'autres destinations (par exemple: google.com, etc.)
Cela m'a incité à contacter le domaine auquel j'avais essayé de me connecter, et en effet, ils avaient un problème sur LEUR FIN qui s'était glissé. Il a été résolu et mon script a recommencé à fonctionner.
Donc ... si vous vous arrachez les cheveux, donnez à openssl un coup de feu et voyez s'il y a quelque chose avec la réponse de l'emplacement que vous essayez de connecter. Peut-être que le problème n'est pas si «local» après tout parfois.
la source
J'ai trouvé une solution qui a fonctionné pour moi. J'ai rétrogradé de la dernière version à la version ~ 4.0 et cela a fonctionné.
Dans composer.json, ajoutez "guzzlehttp / guzzle": "~ 4.0"
J'espère que cela aide quelqu'un
la source
Assurez-vous que vous ouvrez le
php.ini
fichier directement par votre explorateur de fenêtres. (dans mon cas:)C:\DevPrograms\wamp64\bin\php\php5.6.25
.N'utilisez pas le raccourci vers
php.ini
dans le menu de l'icône Wamp / Xamp dans la barre d'état système. Ce raccourci ne fonctionne pas dans ce cas.Modifiez ensuite cela
php.ini
:et
Après avoir enregistré,
php.ini
vous n'avez pas besoin de "Redémarrer tous les services" dans l'icône Wamp ou de fermer / rouvrir CMD.la source
As-tu essayé..
Si vous utilisez une source fiable, vous n'avez sans doute pas besoin de vérifier le certificat SSL.
la source
J'ai passé trop de temps à comprendre ce problème pour moi.
J'avais PHP version 5.5 et je devais passer à 5.6.
Dans les versions <5.6, Guzzle utilisera son propre fichier cacert.pem, mais dans les versions supérieures de PHP, il utilisera le fichier cacert.pem du système.
J'ai également téléchargé le fichier ici https://curl.haxx.se/docs/caextract.html et l' ai placé dans php.ini.
Réponse trouvée dans le fichier Guzzles StreamHandler.php https://github.com/guzzle/guzzle/blob/0773d442aa96baf19d7195f14ba6e9c2da11f8ed/src/Handler/StreamHandler.php#L437
la source
Toutes les réponses sont correctes ; mais la chose la plus importante est que vous devez trouver le bon fichier php.ini. vérifier cette commande dans cmd "php --ini" n'est pas la bonne réponse pour trouver le bon fichier php.ini.
si vous éditez
et vérifie
alors curl.cainfo devrait avoir une valeur. sinon, ce n'est pas le bon fichier php.ini;
* Je vous recommande de rechercher * .ini dans wamp / bin ou xxamp / bin ou tout serveur que vous utilisez et de les modifier un par un et de le vérifier. *
la source
Je viens de rencontrer ce même problème avec le framework PHP Laravel 4 qui utilise le
guzzlehttp/guzzle
package Composer. Pour une raison quelconque, le certificat SSL pour mailgun a soudainement cessé de valider et j'ai reçu le même message "erreur 60".Si, comme moi, vous êtes sur un hébergement mutualisé sans accès
php.ini
, les autres solutions ne sont pas possibles. Dans tous les cas, Guzzle a ce code d'initialisation client qui annulerait très probablement lesphp.ini
effets:Ici, Guzzle force l'utilisation de son propre fichier interne cacert.pem, qui est probablement maintenant obsolète, au lieu d'utiliser celui fourni par l'environnement de cURL . Changer cette ligne (sur Linux au moins) configure Guzzle pour utiliser la logique de vérification SSL par défaut de cURL et a résolu mon problème:
Vous pouvez également définir cette option
false
si vous ne vous souciez pas de la sécurité de votre connexion SSL, mais ce n'est pas une bonne solution.Étant donné que les fichiers
vendor
ne sont pas destinés à être falsifiés, une meilleure solution serait de configurer le client Guzzle lors de l'utilisation, mais cela était tout simplement trop difficile à faire dans Laravel 4.J'espère que cela économisera à quelqu'un d'autre quelques heures de débogage ...
la source
Cela pourrait être un cas périphérique, mais dans mon cas, le problème n'était pas la configuration client (que j'avais déjà
curl.cainfo
configurée dansphp.ini
), mais plutôt le serveur distant qui n'était pas configuré correctement:Il n'a envoyé aucun certificat intermédiaire dans la chaîne. Il n'y a pas eu d'erreur lors de la navigation sur le site avec Chrome, mais avec PHP, j'ai eu l'erreur suivante.
Après avoir inclus les certificats intermédiaires dans la configuration du serveur Web distant, cela a fonctionné.
Vous pouvez utiliser ce site pour vérifier la configuration SSL de votre serveur:
https://whatsmychaincert.com/
la source
quand je cours
'var_dump(php_ini_loaded_file());'
j'obtiens cette sortie sur ma page'C:\Development\bin\apache\apache2.4.33\bin\php.ini' (length=50)'
et pour que php charge mon fichier cert, j'ai dû éditer le php.ini dans ce chemin
'C:\Development\bin\apache\apache2.4.33\bin\php.ini'
et ajouteropenssl.cafile="C:/Development/bin/php/php7.2.4/extras/ssl/cacert.pem"
où j'avais téléchargé et placer mon fichier cert depuis https://curl.haxx.se/docs/caextract.htmlsuis sur windows 10, en utilisant drupal 8, wamp et php7.2.4
la source
J'ai une bonne solution à ce problème, essayons de comprendre la cause première de ce problème. Ce problème survient lorsque ssl de serveurs distants ne peut pas être vérifié à l'aide de certificats racine dans le magasin de certificats de votre système ou ssl distant n'est pas installé avec des certificats de chaîne. Si vous avez un système Linux avec un accès root ssh, alors dans ce cas, vous pouvez essayer de mettre à jour votre magasin de certificats avec la commande ci-dessous:
update-ca-certificates
Si cela ne fonctionne toujours pas, vous devez ajouter le certificat racine et intermédiaire du serveur distant dans votre magasin de certificats. Vous pouvez télécharger les certificats racine et intermédiaires et les ajouter dans le répertoire / usr / local / share / ca-certificats , puis exécuter la commande
update-ca-certificates
. Cela devrait faire l'affaire. De même pour les fenêtres, vous pouvez rechercher comment ajouter des certificats racine et intermédiaire.L'autre façon de résoudre ce problème consiste à demander à l'équipe du serveur distant d'ajouter le certificat SSL en tant que paquet de certificats racine de domaine, de certificats intermédiaires et de certificats racine.
la source
Comme vous utilisez Windows, je pense que votre séparateur de chemin est '\' (et '/' sous Linux). Essayez d'utiliser la constante
DIRECTORY_SEPARATOR
. Votre code sera plus portable.Essayer:
EDIT: et écrivez le chemin complet. J'ai eu quelques problèmes avec les chemins relatifs (peut-être que curl est exécuté à partir d'un autre répertoire de base?)
la source
si vous utilisez WAMP, vous devez également ajouter la ligne de certificat dans php.ini pour Apache (en plus du fichier php.ini par défaut):
fonctionne pour php5.3 +
la source