我正在使用Python 2.7.10
request = urllib2.Request(url, data=urllib.urlencode(params)) f = urllib2.urlopen(request))
导致以下exception:urlopen错误[SSL:CERTIFICATE_VERIFY_FAILED]证书validation失败(_ssl.c:590)
URL是我们的组织可以签署证书的IIS托pipe的网站。 我已经将根证书导入Windows证书pipe理器,并且能够安全地在浏览器中打开URL, 而不会遇到“此网站的安全证书存在问题”之类的消息。
如何解决这个问题? 我不想禁用SSLvalidation
当您通过浏览器访问URL时,您的浏览器将成为客户端,而服务器将变成托管在哪个网站上。 现在,由于您已经导入了浏览器的CA证书,这就是为什么网站在浏览器中打开没有错误的原因。
现在,当你从你的python脚本打开同一个网站时,客户端变成了你的python脚本,而且它不知道这个CA证书。 Python脚本不使用Windows证书存储,所以您将不得不指定一个证书验证完成的CA证书 。
所以,你已经明确地告诉脚本有关CA证书,可以如下:
urllib2.urlopen("https://dinesh.com", cafile="test_cert.pem")
你可以在这里找到这个文档: urllib2.urlopen 。
UPDATE
从以上链接摘录:
可选的
cafile
和capath
参数为HTTPS请求指定一组可信的CA证书。cafile
应指向包含一系列CA证书的单个文件,而capath
应指向散列证书文件的目录。 更多信息可以在ssl.SSLContext.load_verify_locations()中找到。