Как обновить cacerts.txt httplib2 для Github?

Я пытаюсь использовать Github API с httplib2. Но когда я делаю запросы к его конечным точкам, это дает мне следующую ошибку:

import httplib2
h = httplib2.Http()
h.request('https://api.github.com/gists')
# OUT: Traceback (most recent call last):
# OUT:   File "<input>", line 1, in <module>
# OUT:   File "/usr/local/lib/python2.7/dist-packages/httplib2/__init__.py", line 1570, in request
# OUT:     (response, content) = self._request(conn, authority, uri, request_uri, method, body, headers, redirections, cachekey)
# OUT:   File "/usr/local/lib/python2.7/dist-packages/httplib2/__init__.py", line 1317, in _request
# OUT:     (response, content) = self._conn_request(conn, request_uri, method, body, headers)
# OUT:   File "/usr/local/lib/python2.7/dist-packages/httplib2/__init__.py", line 1252, in _conn_request
# OUT:     conn.connect()
# OUT:   File "/usr/local/lib/python2.7/dist-packages/httplib2/__init__.py", line 1044, in connect
# OUT:     raise SSLHandshakeError(e)
# OUT: SSLHandshakeError: [Errno 1] _ssl.c:504: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

Я мог бы использовать следующий обходной путь:

h = httplib2.Http(disable_ssl_certificate_validation=True)
h.request('https://api.github.com/gists')
# OUT: ({'content-length': '58443' ...

Но это все еще обходной путь, и мне интересно, как правильно проверить сертификат SSL для Github с помощью httplib2. Поискав в Google, я обнаружил, что должен обновить cacerts.txt этой библиотеки, но не знаю, как и где получить центр сертификации для Github. Или есть другой правильный способ отправлять запросы через https без проблем с проверкой сертификата?


person Bunyk    schedule 01.09.2013    source источник


Ответы (2)


UPD: Самый простой способ — открыть GitHub в Firefox, Просмотреть информацию о странице -> Безопасность -> Просмотреть сертификат -> Детали -> Экспорт -> Как файл PEM. А также лучше использовать запросы.

Из информации, которую Firefox предоставляет о https-подключении, я узнал, что сертификат для GitHub — «DigiCert High Assurance EV Root CA», который можно найти здесь: http://curl.haxx.se/ca/cacert.pem

Текст сертификата можно вставить в httplib2.__path__ + '/cacerts.txt' или сохранить в отдельный файл, а затем создать http-соединение с помощью:

h = httplib2.Http(ca_certs='/path/to/that/file')

Также есть полезный пост на эту тему .

person Bunyk    schedule 02.09.2013

просто обновите пакет httplib2 с помощью

pip install --upgrade httplib2

или вы можете заменить cacerts.txt этим файлом напрямую https://github.com/httplib2/httplib2/blob/master/python2/httplib2/cacerts.txt

также, если вы используете файл boto.txt, вы можете использовать как boto.txt

ca_certificates_file = /etc/ssl/certs/ca-bundle.crt <--- location of your system cert

или вы можете указать свой файл httplib2 cacerts.txt,

ca_certificates_file = /usr/local/lib/python2.7/dist-packages/httplib2/python2/httplib2/cacerts.txt
person Jewel Mohammad Nuruddin    schedule 24.05.2018