34 votes

lecture de page SSL avec CURL (php)

Je suis en train de télécharger le contenu d'un fichier sécurisé (utilise le protocole https) page web en utilisant php et curl bibliothèques.

Cependant, la lecture a échoué et je reçois l'erreur 60: "certificat SSL problème, vérifiez que le CA cert est OK."

aussi "Détails: SSL3_GET_SERVER_CERTIFICATE:certificat de vérifier échoué"

Donc...assez explicite erreur de msg.

Ma question est: Comment puis-je envoyer un certificat SSL (celle de droite?) et obtenir de cette page, afin de le vérifier et de me laisser entrer?

Aussi, voici mon tableau d'options dans le cas où vous vous demandez:

    $options = array(
        CURLOPT_RETURNTRANSFER => true,     // return web page
        CURLOPT_HEADER         => false,    // don't return headers
        CURLOPT_FOLLOWLOCATION => true,     // follow redirects
        CURLOPT_ENCODING       => "",       // handle all encodings
        CURLOPT_USERAGENT      => "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:x.x.x) Gecko/20041107 Firefox/x.x", // who am i
        CURLOPT_AUTOREFERER    => true,     // set referer on redirect
        CURLOPT_CONNECTTIMEOUT => 120,      // timeout on connect
        CURLOPT_TIMEOUT        => 120,      // timeout on response
        CURLOPT_MAXREDIRS      => 10,       // stop after 10 redirects
        CURLOPT_SSL_VERIFYHOST => 1,
    );

Toutes les suggestions sont les grands, Andrew

50voto

Ryan Graham Points 4734

Il semble que vous pourriez être une mauvaise interprétation de l'erreur. Il me semble que le site auquel vous vous connectez est auto-signé ou de quelque autre problème commun. Tout comme le navigateur habituel d'avertissement, vous êtes la plus simple de contourner ce problème consiste à désactiver les contrôles.

Vous aurez besoin de mettre en CURLOPT_SSL_VERIFYPEER et CURLOPT_SSL_VERIFYHOST de FALSE. Cela devrait désactiver les deux principaux contrôles. Ils ne peuvent tous les deux être nécessaire, mais cela devrait au moins vous allez.

Pour être clair, cela désactive une fonction conçue pour vous protéger. Faire cela seulement si vous avez vérifié le certificat de serveur et par d'autres moyens.

Plus d'infos sur le PHP du site: curl_setopt()

21voto

WayFarer Points 629

Si vous voulez utiliser le protocole SSL vérification par les pairs (de l'éteindre n'est pas toujours une bonne idée), vous pouvez utiliser la solution suivante sur Windows globalement pour toutes les applications:

  1. Télécharger le fichier avec les certificats racine à partir d'ici: http://curl.haxx.se/docs/caextract.html
  2. Ajouter à php.ini:

curl.cainfo=C:/path/to/cacert.pem

c'est toute la magie, le ROULAGE peut maintenant vérifier les certificats.

(que je sache il n'y a pas ce problème sur Linux, au moins sur Ubuntu)

6voto

pkanane Points 596

Même après avoir suivi des conseils sur SO .. Vous pouvez toujours rencontrer des problèmes avec une erreur telle que:

 error:14077438:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert internal error
 

le problème est avec la version SSL. Utilisez ce qui suit pour la version 3

 curl_setopt($ch, CURLOPT_SSLVERSION,3)
 

Je suppose que vous avez également activé la vérification des homologues et des hôtes et que vous pointez sur un fichier de certificat réel. Par exemple.

 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
curl_setopt($ch, CURLOPT_CAINFO, getcwd() . "/cacert.pem");
 

2voto

Comradin Points 121

C'est un "problème" avec openssl et VeriSign.

J'ai eu un problème similaire et mon openssl manquait l'intermédiaire de certificat ssl utilisé par VeriSign pour signer le certificat de serveur.

https://knowledge.verisign.com/support/ssl-certificates-support/index?page=content&id=AR657

J'ai eu pour l'importation de ces certificats intermédiaires de la VeriSign page d'Accueil ou Firefox cert-base de données-exporter dans mon local ca-liste des certificats et après cette étape, j'ai pu utiliser wget/curl pour utiliser la connexion sécurisée sans erreurs.

1voto

S'il s'agit d'une machine de développement, vous pouvez également ajouter ce certificat à votre système. Quelque chose comme ça - https://www.globalsign.com/support/intermediate/intermediate_windows.php C'est pour WinXP, mais cela fonctionne aussi sur d'autres versions de Windows.

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