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&quot ;

[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 :

  1. Vérifier si openssl.cafile est défini dans votre fichier php.ini.
  2. Vérifier si curl.cainfo est défini dans votre fichier php.ini.
  3. Vérifiez si /etc/pki/tls/certs/ca-bundle.crt existe (Red Hat, CentOS, Fedora ; fourni par le paquet ca-certificates)
  4. Vérifiez si /etc/ssl/certs/ca-certificates.crt existe (Ubuntu, Debian ; fourni par le paquet ca-certificates)
  5. Vérifiez si /usr/local/share/certs/ca-root-nss.crt existe (FreeBSD ; fourni par le paquet ca_root_nss)
  6. Vérifier si /usr/local/etc/openssl/cert.pem existe (OS X ; fourni par homebrew)
  7. Vérifiez si C:\windows\system32\curl-ca-bundle.crt existe (Windows)
  8. Vérifiez que le fichier 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 :

echo "openssl.cafile: ", ini_get('openssl.cafile'), "\n";
echo "curl.cainfo: ", ini_get('curl.cainfo'), "\n";

Vous pouvez aussi essayer d'écrire le fichier dans les emplacements indiqués par #7 ou #8.

[1] : https://github.com/cartalyst/stripe

Commentaires (0)

Avez-vous essayé...

curl_setopt($process, CURLOPT_SSL_VERIFYPEER, false);

Si vous consommez une source de confiance, vous n'avez pas besoin de vérifier le certificat SSL.

Commentaires (0)

Comme vous utilisez Windows, je pense que votre séparateur de chemin est '\&#39 ; (et '/&#39 ; sous Linux). Essayez d'utiliser la constante DIRECTORY_SEPARATOR. Votre code sera plus portable.

Essayez :

curl_setopt($process, CURLOPT_CAINFO, dirname(__FILE__) . DIRECTORY_SEPARATOR . 'cacert.pem');

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 ?)

Commentaires (1)