我为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
答案 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版后,我刚刚解决了这个问题。