Python Urllib2 SSL错误

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

有什么想法如何使它与启用验证一起工作吗?


胡子哥哥
浏览 810回答 2
2回答

翻过高山走不出你

这是一个很好的答案,我已将其标记为正确。谢谢!我的实际错误是通过证书[2]并期望验证证书链(也尝试过[0]和[1])。我以为[2]是根证书。我不知道要寻找[OT]还是在哪里找到它。一旦您告诉我指纹,我就可以在/usr/local/share/certs/ca-root-nss.crt(FreeBSD)中找到它,但是我也可以在Firefox中找到它或从Verisign下载它。但是您怎么知道哪一个根证书是正确的呢?浏览器是否通过发行者字符串识别它们?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python