Python 2.7.9现在对SSL证书验证更加严格。太棒了!
对于以前运行的程序现在出现CERTIFICATE_VERIFY_FAILED错误,我并不感到惊讶。但是我似乎无法使它们正常工作(没有完全禁用证书验证)。
一个程序正在使用urllib2通过https连接到Amazon S3。
我将根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)
即使根CA在第4行中正确打印,我仍然会收到CERTIFICATE_VERIFY_FAILED错误。
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
有什么想法如何使它与启用验证一起工作吗?
翻过高山走不出你
相关分类