Erreur cURL 60 : certificat SSL : impossible d'obtenir le certificat de l'émetteur local
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 de l'émetteur local
J'ai fait de nombreuses recherches sur Google et beaucoup de personnes me suggèrent de télécharger ce fichier : [cacert.pem][1], de le placer quelque part et de le référencer dans mon php.ini. Voici 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é le chemin, j'obtiens le même message d'erreur.
J'utilise WAMP à partir des modules Apache et le module ssl_ est activé. Et dans les extensions PGP, j'ai activé php_curl.
Toujours le même message d'erreur. Pourquoi cela se produit-il ?
Je suis maintenant cette solution : [Comment corriger l'erreur PHP CURL Error 60 SSL][2]
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 par la ligne de commande, puisque mon CLI ne trouve pas la commande "curl_setopt" ;
[1] : http://curl.haxx.se/ca/cacert.pem [2] : http://flwebsites.biz/posts/how-fix-curl-error-60-ssl-issue
EDIT
Voici le code que j'exécute :
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');
}
Guzzle, qui est utilisé par [cartalyst/stripe][1], effectue les opérations suivantes pour trouver une archive de certificat appropriée afin de vérifier le certificat d'un 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-certificates)/etc/ssl/certs/ca-certificates.crt
existe (Ubuntu, Debian ; fourni par le paquet ca-certificates)/usr/local/share/certs/ca-root-nss.crt
existe (FreeBSD ; fourni par le paquet ca_root_nss)/usr/local/etc/openssl/cert.pem
existe (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 aussi essayer d'écrire le fichier dans les emplacements indiqués par #7 ou #8.
[1] : https://github.com/cartalyst/stripe
Avez-vous essayé...
Si vous consommez une source de confiance, vous n'avez pas besoin de vérifier le certificat SSL.
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.Essayez :
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 ?)