SSL:CERTIFICATE_VERIFY_FAILED]证书验证失败

时间:2017-07-31 06:30:27

标签: python windows ssl https

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

1 个答案:

答案 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()