2013-09-01 12 views
6

Sto tentando di utilizzare Github API con httplib2. Ma quando ho effettuare richieste al suo endpoint, mi dà errore seguente:Come aggiornare cacerts.txt di httplib2 per 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 

potevo usare seguente soluzione:

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

Ma questo è ancora una soluzione, e mi chiedo come convalidare correttamente Certificato SSL per Github con httplib2. Cercando su Google ho scoperto che dovevo aggiornare cacerts.txt di quella libreria, ma non so come, e dove ottenere l'autorità di certificazione per Github. O c'è un altro modo giusto per inviare richieste tramite https, senza problemi di verifica del certificato?

risposta

4

UPD: Il modo più semplice è aprire GitHub in Firefox, Visualizza informazioni sulla pagina -> Sicurezza -> Visualizza certificato -> Dettagli -> Esporta -> Come file PEM. E inoltre è meglio usare le richieste.

In base alle informazioni che Firefox dà circa connessione HTTPS, ho scoperto che il certificato per GitHub è "DigiCert Alta Assurance EV Root CA", che potrebbe essere trovato qui: http://curl.haxx.se/ca/cacert.pem

Testo del certificato potrebbe essere incollato al httplib2.__path__ + '/cacerts.txt', o salvati in un file separato e di connessione HTTP dovrebbe essere eseguita con:

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

Here is also useful post about this topic.

Problemi correlati