Python Urllib2 erreur SSL

Python 2.7.9 est maintenant beaucoup plus strictes à propos de la vérification du certificat SSL. Génial!

Je ne suis pas surpris que les programmes de travail avant sont en train de CERTIFICATE_VERIFY_FAILED erreurs. Mais je n'arrive pas à obtenir leur travail (sans la désactivation de la vérification du certificat entièrement).

Un programme a l'aide de urllib2 pour se connecter à Amazon S3 sur https.

J'ai télécharger le certificat racine CA dans un fichier appelé "verisign.pem" et essayez ce qui suit:

import urllib2, ssl
context = ssl.create_default_context()
context.load_verify_locations(cafile = "./verisign.pem")
print context.get_ca_certs()
urllib2.urlopen("https://bucket.s3.amazonaws.com/", context=context)

et je reçois toujours CERTIFICATE_VERIFY_FAILED erreurs, même si l'autorité de certification racine est imprimé correctement à la ligne 4.

openssl peut se connecter à ce serveur d'amende. En fait, voici la commande que j'ai utilisé pour obtenir le CA cert:

openssl s_client -showcerts -connect bucket.s3.amazonaws.com:443 < /dev/null

J'ai pris la dernière cert dans la chaîne et le mettre dans un fichier PEM, qui openssl se lit très bien. C'est un certificat Verisign avec:

Serial number: 35:97:31:87:f3:87:3a:07:32:7e:ce:58:0c:9b:7e:da
Subject key identifier: 7F:D3:65:A7:C2:DD:EC:BB:F0:30:09:F3:43:39:FA:02:AF:33:31:33
SHA1 fingerprint: F4:A8:0A:0C:D1:E6:CF:19:0B:8C:BC:6F:BC:99:17:11:D4:82:C9:D0

Toute idées sur la façon de le faire fonctionner avec la validation est activé?

Le certificat est en verisign.pem? Assurez-vous qu'il s'agit d'un certificat avec Empreinte SHA1 de A1:DB:63:93:91:6F:17:E4:18:55:09:40:04:15:C7:02:40:B0:AE:6B (Classe 3 Primaire Publique de l'Autorité de Certification) et non pas l'un avec 4E:B6:D5:78:49:9B:1C:CF:5F:58:1E:AD:56:BE:3D:9B:67:44:A5:E5 (VeriSign Class 3 Primaire Publique de l'Autorité de Certification - G5)
J'ai finalement trouvé que l'un et ça fonctionne, merci! Comment pouvez-vous dire lequel certificat racine qui est utilisé? Je suis à l'aide d'openssl x509 commande pour vidage de chaque cert dans la chaîne. La plupart d'entre eux disent qui cert ils ont signé avec, mais je ne vois pas où la dernière, dit racine cert il a été signé.

OriginalL'auteur abjennings | 2015-01-06