PHP CURL CURLOPT_SSL_VERIFYPEER ignoré

117

Pour une raison quelconque, je ne peux pas utiliser CURL avec HTTPS. Tout fonctionnait bien jusqu'à ce que je lance la mise à niveau des bibliothèques curl. Maintenant, je rencontre cette réponse en essayant d'exécuter des requêtes CURL: Problème avec le certificat SSL CA (chemin? Droits d'accès?)

Suite aux suggestions publiées ici sur des problèmes connexes, j'ai essayé de faire ce qui suit:

  • Désactiver la vérification pour l'hôte et le pair

    curl_setopt($cHandler, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($cHandler, CURLOPT_SSL_VERIFYPEER, true);
  • Activez CURLOPT_SSL_VERIFYPEERet pointez sur cacert.pem téléchargé depuis http://curl.haxx.se/docs/caextract.html

    curl_setopt($cHandler, CURLOPT_SSL_VERIFYPEER, true);  
    curl_setopt($cHandler, CURLOPT_CAINFO, getcwd() . "/positiveSSL.ca-bundle");
  • J'ai également essayé de faire la même chose avec positiveSSL.ca-bundle qui était fourni comme certificat CA de bundle pour le serveur auquel j'essaie de me connecter.

  • Modifier les paramètres php ini avec curl.cainfo=cacert.pem(fichier dans le même répertoire et accessible par apache)

  • Renommer /etc/pki/nssdben/etc/pki/nssdb.old

Malheureusement, aucun des éléments ci-dessus ne peut résoudre mon problème et je reçois constamment un problème avec le message SSL CA cert (chemin? Droits d'accès?).

Et je n'ai pas besoin de cette vérification en premier lieu (je suis conscient des problèmes de sécurité).

Quelqu'un a-t-il d'autres suggestions?

METTRE À JOUR

Après la mise à jour vers les dernières bibliothèques et le redémarrage de toute la boîte, pas seulement Apache que je faisais, tout semble fonctionner à nouveau !!!

Greg
la source
1
Avez-vous mis à niveau la bibliothèque Curl compilée contre une pile SSL différente (GnuTLS vs OpenSSL, peut-être)?
Bruno
Je ne pense pas. Le système est Fedora 16 et c'était vraiment le cas de yum update. Le plus ennuyeux est que je n'ai pas besoin / que je veux toute cette validation et que je n'arrive pas à pouvoir simplement la désactiver.
Greg
Si vous souhaitez utiliser HTTPS pour la sécurité, vous voudrez toujours avoir ce processus de validation en place.
Bruno
Je suis conscient de cela, mais mon cas d'utilisation ici rend tout un peu redondant. De plus, j'ai mis à jour curl vers la dernière version disponible et php vers la version 5.4. Maintenant, le message d'erreur a disparu, mais je n'obtiens pas non plus de cotnent de curl :)
Greg
Ha, maintenant je reçois quelque part la fonction curl_errno rapporte le statut 77 qui selon le manuel est CURLE_SSL_CACERT_BADFILE.
Greg

Réponses:

240

Selon la documentation: pour vérifier l'hôte ou le certificat homologue, vous devez spécifier des certificats alternatifs avec l' CURLOPT_CAINFOoption ou un répertoire de certificats peut être spécifié avec l' CURLOPT_CAPATHoption.

Regardez aussi CURLOPT_SSL_VERIFYHOST:

  • 1 pour vérifier l'existence d'un nom commun dans le certificat d'homologue SSL.
  • 2 pour vérifier l'existence d'un nom commun et également vérifier qu'il correspond au nom d'hôte fourni.

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
trèfle
la source
5
La désactivation de la vérification SSL supprime à peu près toute la sécurité de SSL de toute façon. Vous devriez plutôt corriger votre configuration PHP.
Scopey
7
@Scopey mais parfois vous pourriez en avoir besoin sur des environnements de développement locaux avec des certificats auto-signés. Cela n'a donc probablement aucun sens sur les environnements non publics, mais pour rappel, il est toujours préférable d'avoir un avertissement dans le journal (par exemple SSL verification disabled)
Ivan Borshchov
2

Nous avons eu le même problème sur une machine CentOS7. La désactivation de VERIFYHOST VERIFYPEERn'a pas résolu le problème, nous n'avons plus eu l'erreur cURL mais la réponse était toujours invalide. Faire un wgetsur le même lien que le cURL provoquait également une erreur de certificat.

-> Notre solution était également de redémarrer le VPS, cela l'a résolu et nous avons pu compléter à nouveau la demande.

Pour nous, cela semblait être un problème de corruption de la mémoire. Le redémarrage du VPS a rechargé à nouveau la bibliothèque dans la mémoire et maintenant cela fonctionne. Donc, si la solution ci-dessus @cloverne fonctionne pas, essayez de redémarrer votre machine.

Rvanlaak
la source
Assurez-vous que ce n'est pas intermittent. J'ai eu un problème avec paypal et la vérification par les pairs où cela fonctionnait parfois, parfois non. Cela semblait aléatoire. Configurer explicitement le chemin du cafile et dire à curl où il a été résolu le problème.
Neil Davis