PHP cURL ne fonctionne Pas avec HTTPS
J'ai eu des problèmes sur mon serveur de développement où cURL, tout fonctionne parfaitement avec n'importe quoi HTTP, ne fonctionne pas correctement avec n'importe quoi HTTPS—même exactement la même ressource avec des protocoles différents (pour les tests, j'ai été demander google.com en utilisant les protocoles http et https).
La boucle d'erreur renvoyé est 35: "Un problème s'est produit quelque part dans le protocole SSL/TLS handshake."
J'ai survolé le web et DONC des solutions, et ils ont tous été soit de définir CURLOPT_SSL_VERIFYPEER à false, ce qui ne change rien, ou pour télécharger le fichier de certificat et de définir CURLOPT_CAINFO de son chemin, qui a également ne change rien.
Lors de la configuration d'un certificat, j'ai suivi les instructions de ce tutoriel et ce tutoriel, en essayant à la fois de télécharger le certificat de la ressource, je suis de la demande et le téléchargement d'un cert bundle.
J'ai aussi essayé de définir explicitement CURLOP_PORT à 443. Pour la perfection de ma question, d'autres options que j'ai mis sont CURLOPT_VERBOSE=true, CURLOPT_RETURNTRANSFER=true, et CURLOPT_SSL_VERIFYHOST=2 (j'ai essayé toutes les combinaisons de 1, et 2 avec VERIFYPEER à la fois vrai et faux). J'ai aussi fait en sorte dans le phpinfo() que j'ai OpenSSL et il est activé.
Je suis en utilisant un lot de vieux code qui fonctionnait parfaitement sur mon dernier serveur de production, de sorte que ce code a travaillé avant. Mais que l'hébergement était à l'hébergement partagé et je ne connais pas la plupart de la configuration.
J'ai utilisé les deux http:// www.google.com qui a travaillé; https:// www.google.com qui n'a pas.
si la réponse fourni des réponses à votre question, pourriez-vous s'il vous plaît choisir comme votre réponse si la question peut être fermé? Thx.
Il ne répond pas à la question depuis que je l'ai clairement dit dans la question, que c'était exactement l'insuffisance de la réponse, je l'ai trouvé ailleurs, dans et sur l'Internet. Depuis, j'ai conclu qu'il ne doit pas être résolu en PHP; il ya quelque chose de mal avec le PHP ou mes extensions ou quelque chose. Bien que je ne sais toujours pas trop comment remédier à cela. Je vais fouiner et voir. Merci à vous de toute façon.
OriginalL'auteur spezied | 2012-03-19
Vous devez vous connecter pour publier un commentaire.
Curl n'a pas intégré les certificats racine (comme la plupart des navigateur moderne). Vous devez explicitement point à un cacert.fichier pem:
Sans cela, curl ne peut pas vérifier le certificat envoyé via ssl. Cette même racine que le fichier de certificat peut être utilisé chaque fois que vous utilisez SSL en curl.
Vous pouvez obtenir le cacert.fichier pem ici: http://curl.haxx.se/docs/caextract.html
--insecure
drapeau? Est-il un?réglage
CURLOPT_SSL_VERIFYPEER
à faux est exactement--insecure
drapeau ne sur la ligne de commande. Vous ne voulez pas le faire si vous vous souciez de l'authenticité de votre serveur de destinationil n'a pas de travail. Alors que
CURLOPT_SSL_VERIFYPEER
àfalse
.ensuite, vous faites quelque chose de mal. es, la désactivation de la vérification SSL fonctionne toujours, mais une fois de plus que si vous ne se soucient pas de l'authenticité de votre serveur de destination--n'est pas sage de sécurité choix.
pas de travail,les résultats de vide avec votre code ci-dessus.veuillez indiquer tout autre
OriginalL'auteur Ray
Comment à ce sujet. Il récupère HTTPS page d'accueil de Google pour moi. Il devrait faire l'affaire pour vous.
C'EST L'INSÉCURITÉ. Ne pas le faire. Toujours vérifier par les pairs et de l'hôte. Voir les autres répondre.
Dépend de ce que vous êtes en train de faire. Le déplacement des choses importantes pour les finances, certainement valider le protocole HTTPS. Grattage marques de chaussures à partir d'un site marchand... MITM ne devrait pas être un problème. Évidemment considérer le problème de contexte.
Le droit de réponse est indiqué ci-dessus. Pourquoi utilisez-le lorsque vous pouvez simplement copier le cacert.fichier pem à votre projet et de réaliser des connexions sécurisées. Il prend littéralement une seconde.
C'est vrai que c'est de l'insécurité, cependant, il est très bien pour des fins de test, où les données sensibles n'est pas réellement transmis. Il suffit de ne pas l'utiliser en production.
OriginalL'auteur Joseph Lust
Trouver si votre système d'exploitation comporte un répertoire de certificats. Si oui, alors la CA requises certs déjà inclus. Sur Ubuntu, par exemple, il est généralement
/etc/ssl/certs
. Si ce répertoire existe, définir le CA paramètre path:Vous pouvez également référence à un fichier de certificat de CA. Inclure un cacert.fichier pem dans votre projet ou de l'installer sur votre serveur. Téléchargement à partir d'une source de confiance, par exemple cacert.org. Pour un fichier unique ne définissez pas la CAPATH et, au lieu de seulement ensemble CAINFO:
Éteindre par les pairs et d'accueil de vérification est rapide mais insécurité solution de contournement du problème réel. Ces fonctions existent pour une bonne raison: vous pouvez donc faire confiance, via 3ème partie, que le système auquel vous vous connectez est celui que vous attendez.
OriginalL'auteur Matt S