Python 2.7.9 теперь гораздо более строг относительно проверки сертификата SSL. Отлично!
Я не удивлен, что программы, которые работали до этого, теперь получают ошибки CERTIFICATE_VERIFY_FAILED. Но я не могу заставить их работать (без полного отключения проверки сертификата).
Одна программа использовала urllib2 для подключения к Amazon S3 по https.
Я загружаю корневой сертификат CA в файл с именем "verisign.pem" и попробую следующее:
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)
и я все еще получаю CERTIFICATE_VERIFY_FAILED ошибки, даже если корневой ЦС напечатан правильно в строке 4.
openssl может нормально подключиться к этому серверу. Фактически, вот команда, которую я использовал для получения сертификата CA:
openssl s_client -showcerts -connect bucket.s3.amazonaws.com:443 < /dev/null
Я взял последний сертификат в цепочке и поместил его в файл PEM, который openssl отлично читает. Это сертификат Verisign с:
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
Любые идеи о том, как включить эту работу с проверкой?