我正在使用python 2.7.10
request = urllib2.Request(url, data=urllib.urlencode(params))
f = urllib2.urlopen(request))
导致以下异常: urlopen错误[SSL:CERTIFICATE_VERIFY_FAILED]证书验证失败(_ssl.c:590)
URL是IIS中托管的网站,我们的组织是ca sign cert。 我已经将根证书导入 Windows证书管理器,我可以安全地在浏览器中打开URL 没有遇到类似&#34的消息;这有问题网站的安全证书。"
如何解决此问题? 我不想禁用SSL验证
答案 0 :(得分:2)
当您通过浏览器访问URL时,浏览器将成为客户端,服务器将成为托管哪个Web站点的服务器。现在,由于您已经为浏览器导入了CA证书,这就是为什么网站在浏览器中无错误地打开的原因。
现在,当您从python脚本打开同一个网站时,客户端将成为您的python脚本,并且它不知道此CA证书。 Python脚本不使用 Windows证书存储,因此您必须指定一个 CA证书,将对其进行证书验证。
因此,您已明确告知脚本有关CA证书的内容如下:
urllib2.urlopen("https://dinesh.com", cafile="test_cert.pem")
您可以在此处找到文档:urllib2.urlopen。
<强>更新强>
以上链接的摘录:
可选的
cafile
和capath
参数指定一组 HTTPS请求的可信CA证书。cafile
应该指出 到包含一组CA证书的单个文件,而capath
应指向散列证书文件的目录。更多信息可以在中找到 的 ssl.SSLContext.load_verify_locations() 强>