关于ssl证书

时间:2016-05-20 14:31:14

标签: python ssl tweepy twitter-rest-api

我正在使用Python中的Tweepy运行REST API(Search API)。我在家里完成了这个项目,它完全没问题。但现在我正在不同的网络中处理这个问题,并收到了错误消息。

SSLError: ("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",)

我的代码是这样的。

auth = tweepy.AppAuthHandler(consumer_key, consumer_secret) api = tweepy.API(auth,wait_on_rate_limit=True, wait_on_rate_limit_notify=True)

我找到了这篇文章 Python Requests throwing up SSLError 并设置以下代码(verify = false)可能是一个快速的解决方案。有没有人知道如何做到这一点或其他方式在tweepy?谢谢。

5 个答案:

答案 0 :(得分:2)

在streaming.py中,在第105行添加verify = False为我做了诀窍,如下所示。虽然不建议使用这种方法,因为它会使连接不安全。尚未能为此提出解决方法。

stream = Stream(auth, listener, verify = False)

答案 1 :(得分:1)

我遇到了同样的问题,不幸的是唯一有用的是在Tweepy的auth.py中设置verify = False(对我来说,Tweepy位于我Mac上的/anaconda3/lib/python3.6/site-packages/tweepy):

resp = requests.post(self._get_oauth_url('token'),
                             auth=(self.consumer_key,
                                   self.consumer_secret),
                             data={'grant_type': 'client_credentials'},
                             verify=False)

编辑:

在公司防火墙后面,存在证书问题。在Chrome中转到设置 - >高级 - >证书并下载您的公司CA证书。然后,在Tweepy binder.py中,在session = requests.session()下面添加

session.verify = 'path_to_corporate_certificate.cer'

答案 2 :(得分:0)

首先,验证您是否可以使用代理配置访问Twitter。如果是这样,您可以在代码上修改此行以包含代理URL:

self.api = tweepy.API(self.auth)

答案 3 :(得分:0)

添加verify=False将忽略必须进行的验证,所有数据将以纯文本格式传输,而无需进行任何加密。

pip install certifi

以上安装修复了错误的握手和ssl错误。

答案 4 :(得分:0)

对于任何可能像我一样迷失于此的人,我都遇到了类似的问题,因为我的公司正在使用代理,并且在尝试验证代理的证书时SSL检查失败。

解决方案是将代理的根证书导出为.pem文件。然后,您可以通过执行以下操作将此证书添加到certifi的信任存储中:

import certifi
cafile = certifi.where()
with open(r<path to pem file>, 'rb') as infile:
    customca = infile.read()
with open(cafile, 'ab') as outfile:
    outfile.write(customca)

您必须将<path to pem file>替换为导出文件的路径。这应该允许requests(和tweepy)成功验证证书。