Tweepy SSLError относительно сертификата ssl

Я использую REST API (Search API) с Tweepy на Python. Я работал с программой дома, и все нормально. Но сейчас я работаю над этим в разных сетях и получил сообщение об ошибке.

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, вызывающие SSLError, и установил следующий код (verify = false), который может быть быстрым решением. Кто-нибудь знает как это сделать или другими способами в tweepy? Спасибо.


person Wei-Ting Liao    schedule 20.05.2016    source источник
comment
Вей, просто интересно, нашли ли вы какое-либо постоянное решение этой проблемы, вместо того, чтобы установить флаг проверки SSL на false. У меня аналогичная проблема, но она случайна.   -  person Rohit    schedule 20.06.2016
comment
Спасибо за вопросы. К сожалению ... сейчас не везет. Прямо сейчас я просто пытался избежать подключения к этой сети и использовать другие с другими настройками сетевой безопасности. У вас есть другие решения?   -  person Wei-Ting Liao    schedule 21.06.2016


Ответы (5)


В streaming.py добавление verify = False в строке # 105 помогло мне, как показано ниже. Хотя использовать этот подход не рекомендуется, поскольку он делает соединение небезопасным. Пока не удалось придумать обходной путь.

stream = Stream(auth, listener, verify = False)
person kpratihast    schedule 10.04.2017
comment
Как вы можете сделать это для общих методов API, таких как избранное. - person pradyumnad; 11.04.2018

Я столкнулся с той же проблемой, и, к сожалению, единственное, что сработало, - это установить verify = False в auth.py в Tweepy (для меня Tweepy находится в /anaconda3/lib/python3.6/site-packages/tweepy на моем Mac):

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

Редактировать:

За корпоративным брандмауэром существует проблема с сертификатом. В Chrome перейдите в настройки -> расширенные -> сертификаты и загрузите свой корпоративный сертификат ЦС. Затем в Tweepy binder.py прямо под session = requests.session() добавьте

session.verify = 'path_to_corporate_certificate.cer'

person Nic Scozzaro    schedule 30.04.2018
comment
Это сработало для меня, хотя мой сертификат был не .cer, а .pem. Пока путь к файлу правильный, это сработало. - person S4nd33p; 28.05.2018

Сначала проверьте, можете ли вы получить доступ к твиттеру, просто используя конфигурацию прокси. Если это так, вы можете изменить эту строку в своем коде, чтобы включить URL-адрес прокси:

self.api = tweepy.API(self.auth)
person Alveiro Garcia    schedule 29.10.2017

Добавление verify=False приведет к игнорированию проверки, которая должна быть выполнена, и все данные будут переданы в виде обычного текста без какого-либо шифрования.

pip install certifi

Вышеупомянутая установка исправляет плохое рукопожатие и ошибку ssl.

person onlyvinish    schedule 06.07.2018

Для всех, кто мог наткнуться на это, как и я, у меня была аналогичная проблема, потому что моя компания использовала прокси, и проверка 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> на путь к экспортированному файлу. Это должно позволить requeststweepy) успешно проверить сертификаты.

person JCVanHamme    schedule 23.03.2020