SSL:CERTIFICATE_VERIFY_FAILED]证书validation失败

我正在使用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

Solutions Collecting From Web of "SSL:CERTIFICATE_VERIFY_FAILED]证书validation失败"

当您通过浏览器访问URL时,您的浏览器将成为客户端,而服务器将变成托管在哪个网站上。 现在,由于您已经导入了浏览器的CA证书,这就是为什么网站在浏览器中打开没有错误的原因。

现在,当你从你的python脚本打开同一个网站时,客户端变成了你的python脚本,而且它不知道这个CA证书。 Python脚本不使用Windows证书存储,所以您将不得不指定一个证书验证完成的CA证书

所以,你已经明确地告诉脚本有关CA证书,可以如下:

 urllib2.urlopen("https://dinesh.com", cafile="test_cert.pem") 

你可以在这里找到这个文档: urllib2.urlopen 。

UPDATE

从以上链接摘录:

可选的cafilecapath参数为HTTPS请求指定一组可信的CA证书。 cafile应指向包含一系列CA证书的单个文件,而capath应指向散列证书文件的目录。 更多信息可以在ssl.SSLContext.load_verify_locations()中找到。