Python的 - 问题SSL:CERTIFICATE_VERIFY_FAILED

问题描述:

我想,当我连接到手柄的服务器来解决问题Python的 - 问题SSL:CERTIFICATE_VERIFY_FAILED

requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:579) 

我也用

ssl._create_default_https_context = ssl._create_unverified_context 

一些用户建议,但我没能解决问题。

任何其他解决方案?

感谢

+0

请提供python版本和你的操作系统 – Antwane

+0

@Antwane Centos 7和Python 2.7.5 – Fab

+0

你能解决这个问题吗? –

如果你只是想忽略证书验证,requests接受验证关键字参数用于此目的:

requests.get('https://www.google.com', verify=False) 

这可能会触发一个InsecureRequestWarning,但请求应该可以返回不管。

+0

我刚刚试过这个解决方案:'r = requests.get(url,auth = HTTPBasicAuth(user,pwd),verify = False)'。 httpS返回一个空的响应,而HTTP工作正常。 – Fab

您的服务器是否具有由认证机构签署的有效证书?

如果它使用自签名证书我建议您在Python项目中保存一份公共证书的副本,并在请求的验证参数中传递证书名称。

您可以通过访问Firefox上的服务器,单击地址栏附近的锁定图标,选择证书,然后选择更多详细信息,然后选择查看证书,然后导出来保存证书。

你会得到一个.pem文件,比如说:“my_server_certificate.pem”。

然后当你请求创建Session对象可以传递参数:

session = requests.Session() 
session.verify = "my_server_certificate.pem" 

我用我的Python脚本查尔斯代理的时候也有类似的问题。我希望这可以帮助你解决你的问题。

+0

我得到'__init __()得到了一个意想不到的关键字参数'verify''。我读过这个Session不再需要构造函数中的参数。目前该文档已过时。我尝试了'session = requests.Session()'和 'session.verify = False',但问题仍然存在。 – Fab

+0

我的不好。是的,你必须创建会话,然后设置session.verify =“my_server_certificate.pem” –

+0

编辑答案来反映这一点。 –