6

httplib2 で Github API を使用しようとしています。しかし、エンドポイントにリクエストを送信すると、次のエラーが表示されます。

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' ...

しかし、これはまだ回避策であり、httplib2 を使用して Github の SSL 証明書を適切に検証する方法を考えています。Google を検索するcacerts.txtと、そのライブラリを更新する必要があることがわかりましたが、Github の認証局を取得する方法と場所がわかりません。または、証明書の検証の問題なしに、https を介してリクエストを送信する他の正しい方法はありますか?

4

2 に答える 2

4

UPD:最も簡単な方法は、Firefox で GitHub を開くことです。[ページ情報を表示] -> [セキュリティ] -> [証明書を表示] -> [詳細] -> [エクスポート] -> [PEM ファイルとして] を選択します。また、リクエストを使用することをお勧めします。

Firefox が https 接続について提供する情報から、GitHub の証明書が「 DigiCert High Assurance EV Root CA」であることがわかりました。

証明書のテキストを に貼り付けるhttplib2.__path__ + '/cacerts.txt'か、別のファイルに保存して、http 接続を次のように作成する必要があります。

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

このトピックに関する便利な投稿もここにあります

于 2013-09-02T04:24:23.277 に答える
1

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
于 2018-05-24T05:50:20.683 に答える