143 votes

PHP CURL CURLOPT_SSL_VERIFYPEER ignoré

Pour une raison quelconque, je suis incapable d'utiliser CURL avec HTTPS. Tout fonctionnait bien jusqu'à ce que j'exécute la mise à jour des bibliothèques curl. Maintenant, j'obtiens cette réponse lorsque j'essaie d'effectuer des requêtes CURL : Problème avec le certificat SSL CA (chemin ? droits d'accès ?)

Suite aux suggestions postées ici sur des questions 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);
  • Activer CURLOPT_SSL_VERIFYPEER et pointer vers cacert.pem téléchargé à partir de 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 a été fourni comme certificat CA bundle pour le serveur auquel j'essaie de me connecter.

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

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

Malheureusement, rien de ce qui précède n'est en mesure de résoudre mon problème et je reçois constamment le message Problem with the SSL CA cert (path ? access rights ?).

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 ?

UPDATE

Après la mise à jour des dernières bibliothèques et le redémarrage de l'ensemble de la boîte, pas seulement d'apache comme je le faisais, tout semble fonctionner à nouveau !!!

287voto

clover Points 1275

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

Regardez également CURLOPT_SSL_VERIFYHOST:

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

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

2voto

Rvanlaak Points 132

Nous avons eu le même problème sur une machine CentOS7. En désactivant le VERIFYHOST VERIFYPEER n'a pas résolu le problème, nous n'avions plus l'erreur cURL mais la réponse était toujours invalide. En faisant un wget vers le même lien que celui utilisé par le cURL a également donné lieu à une erreur de certificat.

-> Notre solution a également consisté à redémarrer le VPS, ce qui a résolu le problème et nous avons pu à nouveau répondre à la demande.

Pour nous, il s'agissait d'un problème de corruption de mémoire. Le redémarrage du VPS a rechargé la librairie dans la mémoire et maintenant cela fonctionne. Donc si la solution ci-dessus de @clover ne fonctionne pas, essayez de redémarrer votre machine.

1voto

$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Return data inplace of echoing on screen
curl_setopt($ch, CURLOPT_URL, $strURL);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // Skip SSL Verification
$rsData = curl_exec($ch);
curl_close($ch);
return $rsData;

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