web-dev-qa-db-fra.com

Comment obtenir un certificat SSL à vérifier en Python?

J'ai un certificat peu coûteux de EssentialSSL (Comodo est le CA) et j'ai été surpris de découvrir que Python ne le reconnaissait pas.

requests.exceptions.SSLError: [Errno 1] _ssl.c:509: error:14090086:SSL
routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

Le certificat semble être correctement reconnu par tous les principaux navigateurs. Cependant, Python ne le valide pas.

Si possible, je préférerais une solution d'installation simple comme celle d'un paquet ou d'un script.

J'ai été un peu surpris de ne pas voir Comodo dans la liste par défaut des certificats reconnus par la CA. Tous les principaux navigateurs (5) l'acceptent, mais pas Ubuntu wget/python/... (openssl, je suppose, en est la cause).

2
sorin

Utilisez le paquet Debian ca-certificates qui incorporera (entre autres) tous les certificats d’AC dont Mozilla Firefox/Thunderbird/etc. les usages.

Vous pouvez utiliser le fichier de certificat (tous les certificats en un, formaté PEM) dans Python comme suit:

ssl_sock = ssl.wrap_socket(sock,  
                           ca_certs="/etc/ssl/certs/ca-certificates.crt",  
                           cert_reqs=ssl.CERT_REQUIRED  
                          )
2
Dominik