如何修复仅在Pycharm(Python3)中引发的“ SSL:CERTIFICATE_VERIFY_FAILED”错误

时间:2019-04-29 16:59:19

标签: python-3.x pycharm ssl-certificate

使用Python3解释器在Pycharm中发出https请求时,收到错误消息:

ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1056)

我倾向于认为这是我的Pycharm配置存在的问题,因为仅当使用任何版本的Python3时,此问题才会在Pycharm中发生。该代码在使用Python2.7的Pycharm中运行良好,并且在命令行中运行Python3则运行良好。

我通过Pycharm尝试使用不同版本的Python3创建新的虚拟环境。所有这些都基于能够成功运行独立于Pycharm的代码的解释器。

此错误的最常见解决方案是运行在Install Certificates.command处找到的/Applications/Python 3.x/,但是运行该错误只会确认certifi程序包已经是最新的。

下面的代码的最后一行引发错误:

headers = {"authuser":username, "authpass":password}
conn = http.client.HTTPSConnection(url)
conn.request("POST",requestpath, headers)

1 个答案:

答案 0 :(得分:0)

假设您正在运行Python 3.4.3或更高版本,并且可以不用验证目标就可以,则可以尝试禁用证书和主机名检查:

headers = {"authuser":user, "authpass":pass}
conn = http.client.HTTPSConnection(url, context=ssl._create_unverified_context())
conn.request("POST",requestpath, headers)

摘自https://docs.python.org/3/library/http.client.html上的Python3官方文档:

  

在版本3.4.3中进行了更改:此类现在执行所有必需的操作   默认情况下,证书和主机名检查。要还原到上一个,   未经验证,行为ssl._create_unverified_context()可以传递给   上下文参数。