2011-01-11 1 views
11

J'ai récemment rencontré un problème lors de la publication de données sur un serveur dont le certificat SSL a été mis à jour. J'ai fait quelques recherches et j'ai trouvé que lorsque CURLOPT_SSL_VERIFYPEER est défini sur false, la date de publication passe avec succès. Quelqu'un peut-il expliquer la relation entre CURLOPT_SSL_VERIFYPEER et _VERIFYHOST? De plus, si je mets VERIFYPEER à false, ne transmets-je plus les données via une connexion sécurisée?Si CURLOPT_SSL_VERIFYPEER est faux, le transfert de données n'est-il plus sécurisé?

Merci beaucoup pour toute aide que vous pouvez donner.

Répondre

19

La connexion sera toujours cryptée SSL. Vous ne le ferez tout simplement pas sur un lien qui utilise des certificats validés-comme-corrects. N'importe qui peut créer lui-même un certificat SSL qui fera un cryptage parfaitement acceptable quel que soit le niveau supporté par votre navigateur et le serveur web. Cependant, ce que vous obtiendrez, ce sont de nombreuses plaintes pour ne pas être en mesure de vérifier l'authenticité du certificat. Ceci afin d'empêcher Joe M. Alicious de créer lui-même un certificat prétendant être "microsoft.com" et de configurer son propre hôte Windows Update. Le cert dira que c'est microsoft.com, mais il ne peut être authentifié comme étant en fait microsoft.com, car Verisign (ou quiconque) n'a pas réellement émis ce certificat et a mis son propre cachet d'authenticité (en signant le cert) dessus. _VERIFYHOST est là pour vérifier que le nom d'hôte de l'URL à laquelle vous vous connectez (par exemple "microsoft.com") est répertorié dans le certificat SSL. Si cette option est définie sur false, les incompatibilités de nom d'hôte et d'URL seront ignorées (par exemple, vous avez une zone de développement sur testbox.develhost.com, mais vous utilisez le vrai certificat 'example.com' de votre client). _VERIFYPEER désactive la validation du certificat complet.

Cela permet aux certificats auto-signés de fonctionner. Dans le cas contraire, la bibliothèque SSL indiquera que l'émetteur du certificat n'est pas valide.

Mais quel que soit le paramètre, si vous forcez via une connexion, il sera crypté SSL.

+0

Excellent, merci beaucoup pour une réponse concise. –

+1

mais [ne l'éteignez pas à moins d'accéder à un serveur privé!] (Http://snippets.webaware.com.au/howto/stop-turning-off-curlopt_ssl_verifypeer-and-fix-your-php -config /) – webaware

1

Je voudrais clarifier la relation entre _VERIFYHOST et _VERIFYPEER de mes tests.

_VERIFYHOST vérifier le nom commun (CN) comme indiqué dans le manuel qui dépend de l'option 1 ou 2. Cette vérification vérifie uniquement et génère un cas de message d'erreur a échoué. La vérification elle-même n'a aucun effet sur la connexion, même une erreur de vérification se produit. C'est le résultat utilisé par _VERIFYPEER pour couper ou continuer la connexion.

_VERIFYPEER (1) vérifier 2 choses. D'abord, il vérifie le certificat avec CAINFO. si CAINFO spécifie dans l'option curl alors il vérifie avec cette valeur, sinon il vérifie avec la valeur spécifiée dans php.ini. Deuxièmement, il vérifie le résultat de _VERIFYHOST (cas set _VERIFYHOST à ​​1 ou 2). Si la vérification réussit les deux conditions, la connexion sera poursuivie. Sinon, la connexion sera coupée.

0

Si vous désactivez CURLOPT_SSL_VERIFYPEER, aucune vérification du certificat n'est effectuée (et la valeur de CURLOPT_SSL_VERIFYHOST est ignorée). En conséquence, cela vous laisse insécurisé contre les attaques de l'homme du milieu. Cela signifie que vous ne transmettez plus les données via une connexion sécurisée.

Oui, les données sont cryptées, mais elles ne sont toujours pas sécurisées. Vous savez que vous envoyez à quelqu'un, mais vous n'avez aucune idée de qui; vous pourriez l'envoyer à l'ennemi juré de l'utilisateur (en le chiffrant soigneusement pour que personne d'autre que l'attaquant ne puisse lire les données). C'est mauvais. Tout le chiffrement dans le monde n'est pas très bon si vous cryptez en utilisant la clé publique de l'attaquant.

Ligne de fond: ne désactivez pas CURLOPT_SSL_VERIFYPEER. Cela vous laisse insécurisé.

Voir Security consequences of disabling CURLOPT_SSL_VERIFYHOST (libcurl/openssl) pour en savoir plus sur ce que vous devez faire pour utiliser le support SSL de cURL en toute sécurité.

Questions connexes