Python:[SSL:CERTIFICATE_VERIFY_FAILED]证书验证失败(_ssl.c:646)

时间:2017-02-27 03:28:24

标签: python ssl

我为python request.get和request.post调用获取[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:646)。 以前上面的调用工作正常,现在我们在IIS中引入了HTTPS重定向,我们得到了这个错误。 所以我改变了来自的电话 requests.get(url)requests.get(url, verify=False)requests.post(url, data=data)requests.post(url, data=data, verify=False)。然后无法访问POST Web APIS。 然后我尝试将URL从Http更改为Https并使verify = false,在这种情况下,请求调用工作正常,但我收到警告,例如"最好添加证书验证"。 我还试图从服务器端证书选项创建一个X.509(.CER)证书文件,并给出了.cer文件路径以进行验证(验证='路径\到\ cer文件),仍然是geetting&#34 ; [SSL:CERTIFICATE_VERIFY_FAILED]"。 这种方法有什么不对吗? 有人早点面对这个问题吗? 如果您对此问题有任何见解,请分享。

提前致谢 Susmitha

2 个答案:

答案 0 :(得分:0)

此问题不是来自您的代码,而是来自API服务器。 如果CA未验证服务器的SSL证书,则会引发SSL: CERTIFICATE_VERIFY_FAILED,您应该将server-side-ssl添加到本地REQUESTS_CA_BUNDLE

link: ssl-cert-verification会有所帮助。

请记住,您应该.post(verify='/path')使用CA_BUNDLE file

如果您使用CER文件等证书文件,可以考虑这样做:

s = requests.Session()
s.cert = '/path/client.cert'

答案 1 :(得分:0)

请检查系统提供的openssl版本,使用此cmd:

> openssl version
OpenSSL 0.9.8zh 14 Jan 2016

我将openssl从2014版更新到2016版后,我刚刚解决了这个问题。