41 votes

Accès Paypal - Certificat SSL: impossible d'obtenir le certificat de l'émetteur local

Je travaille avec cUrl et PHP pour faire une demande à un serveur (par paypal access)

Paypal développeur de site web ne mentionnent jamais que d'un certificat SSL est nécessaire pour utiliser PayPal access API, mais le code que j'utilise pour demander le jeton est le suivant:

$options = array(
                CURLOPT_URL => $url,
                CURLOPT_POST => 1,
                CURLOPT_VERBOSE => 1,
                CURLOPT_POSTFIELDS => $postvals,
                CURLOPT_RETURNTRANSFER => 1,
                CURLOPT_SSLVERSION => 3
);

curl_setopt_array($ch, $options);

$response = curl_exec($ch); 
echo curl_error($ch);

Cet écho sorties d'erreur suivants:

SSL certificate problem: unable to get local issuer certificate

Mes questions sont les suivantes:

1) ai-je besoin de SSL de paypal pour utiliser l'accès si j'ai besoin seulement d'obtenir l'email de l'utilisateur?

2) si je n'ai pas besoin de SSL pourquoi cette erreur occours?

PS: le point de terminaison est la suivante: https://www.sandbox.paypal.com/webapps/auth/protocol/openidconnect/v1/tokenservice

120voto

oori Points 1663

La correcte solution est de corriger votre configuration de PHP.. réglage CURLOPT_SSL_VERIFYPEER à faux est un moyen rapide de hack, mais c'est faux comme vous désactivez la validation du certificat par une autorité de certification. Cela vous expose à un man-in-the-middle attack.

C'est facile à corriger (php 5.3.7 ou plus) - Télécharger un fichier de liste avec un up-to-date, les autorités de certification, et d'ajouter ce paramètre à votre php.ini
curl.cainfo=<path-to>cacert.pem

Redémarrez votre serveur web, et ça marchera !

12voto

Marcin Orlowski Points 24633

Vous pouvez désactiver la vérification SSL (qui est activé par défaut cURL 7.10), en ajoutant ceci:

CURLOPT_SSL_VERIFYPEER, false

pour votre $options, cependant la bonne façon est de garder la validation est activé.

AVIS DE SÉCURITÉ

Si le site distant utilise un certificat délivré par connu CA mais la validation échoue encore, il est alors probable que le certificat est correctement configuré sur le serveur distant (manque de certificats intermédiaires, etc.). Sinon votre système a obtenu aucune idée à ce sujet utilisés Autorité de certification qui a signé la cible du certificat. Dans de tels cas yo devez utiliser php.inis' curl.cainfo de point de val-fichier PEM avec tous pris en charge les CAs - qui ferait de votre installation de valider correctement l'émetteur de la chaîne.

S'il vous plaît être conscient que par la mise en CURLOPT_SSL_VERIFYPEER de false vous êtes PAS résoudre le problème! Vous travaillez autour de. Ce est tout au sujet de la sécurité si c'est bien de le faire pour un certain temps, mais deploing que sur la production n'est pas sage, poliment de parler, car vous êtes ouvert à []1. Vous avez été averti.

2voto

Andomar Points 115404

Certificat SSL problème: impossible d'obtenir le certificat de l'émetteur local

Signifie que cUrl n'a pas confiance à Verisign, l'autorité de certification qui garantit PayPal. Marc B commentaires, cUrl n'est plus livré avec confiance pour une autorité de certification.

Vous pouvez contourner le certificat de la chaîne de validation avec l'option:

CURLOPT_SSL_VERIFYPEER => 0

Pour lire comment configurer cUrl, de sorte qu'il approuve Verisign, lire le roulage de la documentation.

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