2013-09-01 6 views
6

Próbuję użyć Github API z httplib2. Ale kiedy wysyłać żądania do jego punktów końcowych, to daje mi następujący błąd:Jak zaktualizować plik cacerts.txt dla httplib2 dla Github?

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 

mogę użyć następującego rozwiązania:

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

ale nadal jest to obejście, i zastanawiam się, jak prawidłowo zweryfikować Certyfikat SSL dla Github z httplib2. Wyszukiwanie w Google Uznałem, że należy zaktualizować cacerts.txt tej biblioteki, ale nie wiem jak i gdzie uzyskać certyfikat dla Github. Czy istnieje inny odpowiedni sposób wysyłania żądań za pośrednictwem https, bez problemów z weryfikacją certyfikatu?

Odpowiedz

4

UPD: Najprostszym sposobem jest otwarcie GitHub Firefox, wyświetlić informacje na stronie -> Zabezpieczenia -> Wyświetl certyfikat -> Szczegóły -> Export -> W pliku PEM. A także lepiej jest korzystać z wniosków.

Z informacji, które Firefox daje o https połączenie, okazało się, że certyfikat na GitHub jest „DigiCert Wysoka gwarancja EV głównej CA”, który można znaleźć tutaj: http://curl.haxx.se/ca/cacert.pem

Tekst certyfikatu może być wklejony do httplib2.__path__ + '/cacerts.txt' lub zapisywane do osobnego pliku i od połączenia http powinny być tworzone z:

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

Here is also useful post about this topic.

Powiązane problemy