我正在尝试让urllib中的opener与Python 2.7.9中的自签名SSL证书一起使用。它与简单直接的urlopen完美配合,如下所示:
import urllib2
req = urllib2.Request('https://myurl.com')
r = urllib2.urlopen(req,cafile='/my/certs.pem')
r.read()
...但是,当我使用(我认为是)有效的设置处理程序的同样的事情......
import ssl
import urllib2
s = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
s.load_verify_locations(cafile='/my/certs.pem')
sh = urllib2.HTTPSHandler(s)
o = urllib2.build_opener(sh)
r = o.open('https://myurl.com')
r.read()
...我在证书上收到错误:
urllib2.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)>
编辑:我为了问题的目的简化了我的示例,但我需要使用第二个版本,因为我需要在打开连接之前添加另一个处理程序(用于摘要式身份验证)。因此,如果使用自签名证书和摘要式身份验证的替代选项,我全都听见了!
我去过这里已经有一段时间......提前感谢您的帮助。