466 votes

Demandes de Python vomir SSLError

Je travaille sur un script simple qui implique des CAS, la vérification de sécurité jspring, redirection, etc.. Je voudrais utiliser des requêtes de python de Kenneth Reitz parce que c’est un grand morceau de travail ! CAS exige toutefois obtenir validée via SSL, donc je dois franchir cette étape première. Je ne sais pas ce que les demandes de Python est désireux ? Où est-ce que ce certificat SSL suppose d’habiter ?

626voto

Rafael Almeida Points 1907

Le problème que vous rencontrez soit causée par un non approuvés certificat SSL.

Comme @dirk mentionné dans un commentaire précédent, la plus rapide fix est un paramètre verify=False.

Veuillez noter que ce sera la cause de l'attestation qui n'a pas à être vérifiée. Comme mentionné dans les commentaires, cela peut être acceptable pour rapide/jetable/d'applications de scripts. Si ce n'est pas acceptable dans votre contexte particulier, envisager les options suivantes:

  • Réglage de l' verify paramètre une chaîne de caractères qui est le chemin de la .pem fichier du certificat.
  • Paramètre verify=True et configurer votre système afin qu'il vérifie le certificat. Il faudrait ajouter le certificat en tant que sait de l'une ou de modifier le système de Certificats de l'Autorité de celui qui reconnaît le certificat que vous souhaitez. Parler du Système/administrateur Réseau si vous en avez un dans ce contexte.

128voto

Boud Points 3941

De demandes de documentation sur la vérification SSL:

Requêtes peuvent vérifier les certificats SSL pour les requêtes HTTPS, tout comme un navigateur web. Pour vérifier le certificat SSL de l’hôte, vous pouvez utiliser l’argument de vérifier :

64voto

J.F. Sebastian Points 102961

Le nom du fichier de CA à utiliser vous pouvez passer `` :

Si vous utilisez puis utilise son propre CA la valeur qui pourrait ne pas avoir CA qui a signé votre certificat de serveur.

13voto

chk Points 101

J'ai trouvé une approche spécifique pour la résolution d'un problème similaire. L'idée est de pointer l'cacert fichier stocké dans le système[1] et utilisé par un autre ssl fonction des applications.

Dans Debian (je ne suis pas sûr si même dans les autres distributions) les fichiers de certificat (.pem) sont stockés à l' /etc/ssl/certs/ de la Sorte, c'est le code qui fonctionne pour moi:

import requests
verify='/etc/ssl/certs/cacert.org.pem'
response = requests.get('https://lists.cacert.org', verify=verify)

Pour deviner ce qu' pem le fichier de choisir, j'ai accédez à l'url, et vérifiez le Certificat d'Autorité de certification (CA) a généré le certificat.

EDIT: si vous ne pouvez pas modifier le code (parce que vous utilisez une troisième application), vous pouvez essayer d'ajouter l' pem certificat directement dans /usr/local/lib/python2.7/dist-packages/requests/cacert.pem (par exemple, la copie à la fin du fichier).

[1] http://hearsum.ca/blog/python-and-ssl-certificate-verification/#comment-443

5voto

J'ai rencontré le même problème. S'avère que je n'avais pas installé le certificat intermédiaire sur mon serveur (juste l'ajouter à la partie inférieure de votre certificat comme on le voit ci-dessous).

https://www.digicert.com/ssl-support/pem-ssl-creation.htm

Assurez-vous d'avoir le paquet ca-certificates installé:

sudo apt-get install ca-certificates

La mise à jour de l'heure peut également résoudre ce problème:

sudo apt-get install ntpdate
sudo ntpdate -u ntp.ubuntu.com

Si vous utilisez un certificat auto-signé, vous devrez probablement ajouter à votre système manuellement.

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