Les requêtes SSL de Python et chiffrons les certs
j'ai du mal en ce moment à obtenir le demande bibliothèque pour effectuer un simple GET
demande à un site de mine avec un Let's Encrypt certificat. Tout est bien avec le site et je peux y accéder à partir de Chrome très bien. (Je dirige OSX El Capitan en ce moment).
d'Abord j'ai essayé de faire un GET
demande au site:
>>> import requests
>>> requests.get('https://example.com')
Cela me donne:
requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)
j'ai alors essayé diverses choses, y compris obtenir détenir de l' chiffrons le certificat d'autorité et openssl
commande vérifie mon certificat du site:
> openssl s_client -CAfile ./letsencryptauthorityx1.pem -connect example.com:443
dont la sortie comprenait ce qui suit vers le bas:
...
SSL-Session:
Protocol : TLSv1
Cipher : DHE-RSA-AES256-SHA
Session-ID: ...
Session-ID-ctx:
Master-Key: ...
Key-Arg : None
Start Time: 1452865123
Timeout : 300 (sec)
Verify return code: 0 (ok)
---
peut-être que je manque quelque chose ici, mais il me semble que mon site a été vérifié selon le certificat D'autorité de chiffrement que j'ai fourni. Alors, j'ai heureusement changé mon code Python en:
>>> requests.get('https://example.com', verify='./letsencryptauthorityx1.pem')
Mais I encore l' requests.exceptions.SSLError
erreur. J'ai aussi essayé d'utiliser le DER
format du certificat de l'autorité, mais ensuite, j'obtiens l'erreur suivante requests
:
requests.exceptions.SSLError: unknown error (_ssl.c:2825)
quelqu'un Peut peut-être m'éduquer à la façon d'aller sur la fixation de ce?
3 réponses
on dirait que vos certificats sur la machine ne sont pas à jour ou que le serveur web n'est pas configuré pour servir toute la chaîne de certificats.
sur OSX vous pouvez exporter tous les certs de votre porte-clés d'accès à A.fichier pem et ensuite pointer les requêtes vers ce fichier: http://movingpackets.net/2015/03/18/telling-openssl-about-your-root-certificates/
CA_BUNDLE = path_to_your_exported_file.pem
response = requests.get(user_account_url, verify=CA_BUNDLE)
Pour une perte de l'âme que suis tombé sur ce post en cherchant un Windows Correctif pour ce problème.
Utilisation De Chrome:
- ouvrir L'URL en utilisant HTTPS.
- sur la barre d'adresse, Cliquez où il est écrit "Sécurisé".
- Cliquez sur le certificat.
- allez à l'onglet" Chemin de Certification".
- sélectionnez " chiffrons L'Autorité X3 "(passez à un niveau supérieur), puis cliquez sur"Voir le certificat".
- aller à La " détails" onglet et cliquez sur "Exporter vers un Fichier".
- dans L'Assistant, cliquez sur Suivant et sélectionnez "Base-64 encoded X. 509 (.CER)", cliquez à nouveau sur Suivant.
- sélectionnez un dossier et le nom du fichier (souvenez-vous de ce répertoire).
- Aller au dossier et cliquez-droit sur le certificat et cliquez sur "Installer le Certificat".
- Sélectionner la Machine Locale (Nécessite des Droits d'Administrateur), cliquez sur suivant.
- Sélectionner "Sélectionner automatiquement la boutique de certificats..."(Par défaut), cliquez sur prochain.
- Cliquez Sur Terminer.
- Lancez à nouveau votre Script Python.
avertissement: utiliser Chrome 67.0.3396.99 avec Windows 10 64-Bit.