J'ai eu exactement le même problème
Can't connect to PayPal to validate IPN message: SSL certificate: unable to get local issuer certificate
je les exemples de code générés ici github de paypal trouvé (je PHP): https://github.com/paypal/ipn-code-samples
J'ai téléchargé les certs et ont essayé de tester à la fois de boucles: Après environ 2 heures de tests (en utilisant le simulateur ipn de paypal) et googling, j'ai trouvé que paypal ipn ne peut pas être testé sur localhost
, donc j'ai poussé le code en direct et j'ai essayé le testin g, mais toujours la même erreur (même avec les permissions définies sur 777).
Lorsque j'ai défini CURLOPT_SSL_VERIFYPEER, false
, cela a fonctionné, mais cela annulerait le but d'avoir un certificat ssl. Après avoir scruté les fichiers de mon serveur, j'ai trouvé un fichier curl-ca-bundle.crt
dans mon dossier PHP. J'ai décidé de coder en dur le CURLOPT_CAINFO
dans mon script paypal ipn à ce chemin. Ça a finalement marché! J'ai remarqué que ce fichier .crt plus ancien contenait des certificats qui ne figuraient pas dans le dernier fichier .crt du site Web curl. C'était un tas de certificats de verisign class 1, verisign class 2, verisign class 3 and verisign class 4
.
est ici la liste complète des noms de certificat, j'ai ajouté à friser de .CRT fichier:
- Verisign classe 1 Autorité de certification primaire publique
- Verisign classe 1 Autorité de certification primaire publique - G2
- Verisign classe 1 Autorité de certification publique principale - G3
- Autorité de certification publique principale Verisign Classe 2 - G2
- Verisign Certi fication Autorité - G3
- Verisign de classe 3 Autorité de certification primaire publique
- Verisign classe 4 Autorité de certification primaire publique - G2
Cela peut avoir quelque chose à voir avec ce que @Andomar a dit - certificat de verisign de paypal n'est pas inclus dans la liste par défaut (par défaut, je veux dire curl par défaut) des certificats de sécurité.
Je n'avais pas le temps de déboguer et de déterminer exactement quel certificat est nécessaire, donc je les ai tous inclus.
Pour tous ceux qui rencontreraient ce problème dans le futur, je suggérerais d'obtenir les derniers certs de curl et d'ajouter un par un les certificats dans la liste ci-dessus jusqu'à ce que l'erreur soit partie.
est ici un lien pour certains de ces certificats verisign (vous devrez peut-être google pour les autres qui ne figurent pas): www.symantec.com/page.jsp?id=roots
* Note: Pour afficher le courant de paypal certificats que vous pouvez exécuter cette commande dans le terminal:
openssl s_client -connect paypal.com:443 -showcerts
Si quelqu'un a un meilleur aperçu de cette question, s'il vous plaît commentaires que je passais des heures à comprendre tous les PRÉCÉDENTES.
pas vraiment étrange. curl n'est plus livré avec les certificats CA, donc par défaut, il ne fait confiance à personne. –
@MarcB: Intéressant, je supposais qu'il utilisait le magasin de certificats du système d'exploitation. – Andomar
ce serait bien, mais étant donné le nombre d'endroits où ce magasin est conservé, probablement le meilleur pour boucler juste aller paranoïaque et penser que tout le monde est dehors pour l'obtenir. –