2011-09-17 15 views
1

私はcommand-line Python starter for Google Plus API作業を取得しようとしているが、認証が完了した後、私はこのエラーに遭遇上で実行されているGoogleのプラスAPIコマンドラインPythonのスターターキットでSSLエラーを解決するために探している相手:localhostの

ssl.SSLError: [Errno 185090050] _ssl.c:336: error:0B084002:x509 certificate routines:X509_load_cert_crl_file:system lib

私はPython 2.7 on Ubuntu 11.04を実行しています。 APIはを使用してリクエストを送信します。私はlocalhostのスターターキットを外しています。


はここで、端末のダンプです:

  1. 手動でコピーcacerts.txt http://httplib2.googlecode.com/hg-history/6525cadfde53279479533c1235e2661f5c147afc/python2/httplib2/cacerts.txtから
  2. /usr/lib/python2.7/dist-packages/httplib2へ:私はこの作業を取得しようとした

    物事

    Traceback (most recent call last): 
    File "/home/vijay/Downloads/google-plus-python-starter/cli/plus_cli.py", line 114, in <module> 
    main() 
    File "/home/vijay/Downloads/google-plus-python-starter/cli/plus_cli.py", line 62, in main 
    credentials = authorize_self(settings.CLIENT_ID,settings.CLIENT_SECRET) 
    File "/home/vijay/Downloads/google-plus-python-starter/cli/plus_cli.py", line 48, in authorize_self 
    credentials = run(flow, storage) 
    File "/home/vijay/Downloads/googleapi/oauth2client/tools.py", line 146, in run 
    credential = flow.step2_exchange(code) 
    File "/home/vijay/Downloads/googleapi/oauth2client/client.py", line 698, in step2_exchange 
    headers=headers) 
    File "/home/vijay/Downloads/googleapi/httplib2/__init__.py", line 1436, in request 
    (response, content) = self._request(conn, authority, uri, request_uri, method, body, headers, redirections, cachekey) 
    File "/home/vijay/Downloads/googleapi/httplib2/__init__.py", line 1188, in _request 
    (response, content) = self._conn_request(conn, request_uri, method, body, headers) 
    File "/home/vijay/Downloads/googleapi/httplib2/__init__.py", line 1123, in _conn_request 
    conn.connect() 
    File "/home/vijay/Downloads/googleapi/httplib2/__init__.py", line 890, in connect 
    self.disable_ssl_certificate_validation, self.ca_certs) 
    File "/home/vijay/Downloads/googleapi/httplib2/__init__.py", line 76, in _ssl_wrap_socket 
    cert_reqs=cert_reqs, ca_certs=ca_certs) 
    File "/usr/lib/python2.7/ssl.py", line 344, in wrap_socket 
    ciphers=ciphers) 
    File "/usr/lib/python2.7/ssl.py", line 119, in __init__ 
    ciphers) 
    ssl.SSLError: [Errno 185090050] _ssl.c:336: error:0B084002:x509 certificate routines:X509_load_cert_crl_file:system lib` 
    
    を最新のveに更新しましたrsion 0.7.1
  3. スターターキット(plus_cli.py)内のファイルから作られたすべてのhttplib2の呼び出しで無効SSL、私はアイデアの出だし、これを解決する上であなたの助けが必要httplib2.Http(disable_ssl_certificate_validation=True)

を使用。

+0

この答えは、関連する質問に私の仕事: http://stackoverflow.com/a/16758765/1160485 –

答えて

0

python-httplib2バージョンをお使いですか?

google-api-python-clientの代わりにpython-httplib2 0.7.1-2(Debian Sid)を使って解決しました。

1

場合誰かが同様のエラー(エラーコード185090050)を持っています。問題は、証明書情報を含むファイルをロードできなかったことです。私の場合は、Dropbox SKDで使用されているpkg_resourcesと互換性がないpyInstallerが原因でした。代わりにpkg_resourcesを使用しての

TRUSTED_CERT_FILE = 'trusted-certs.crt' 

、およびアプリケーションと一緒に信頼できるcertsの一覧を配布する:だけのDropboxのrest.py次のように証明書を割り当てる行を編集します。 PythonのSSLライブラリが表示さ非常に不透明なエラーメッセージが、本当に、それだけで不足しているファイルのことだ...

1

私は別のスクリプトと同じ問題を抱えていたし、問題は、以下れると思う:

  1. とき(多かれ少なかれ)python用google apiをインストールすると、自動的にhttplib2のバージョンもインストールされます
  2. このバージョンはバグです。

    (私のシステムで

/usr/local/lib/python2.7/dist-packages/httplib2-0.8-py2.7.egg/httplib2の下に配置された)一つのことcacerts.txtファイルの場合

は、読み取り専用です。しかし実際の問題は、パッケージが存在しない "ca_certs_locatermodule"を探しているようです。 httplib2のこのバグのあるバージョン(つまり、フォルダ

/usr/local/lib/python2.7/を動かす

私のシステムはhttplib2とにかく自分のパッケージとしてインストール(あなたがそうであるようにそれはそう)しているので、(再) dist-packages/httplib2-0.8-py2.7.egg)

が問題を解決しました。この種の問題を追跡するために、あなたは

straceの-o io.txtパイソンyour_script.py

を実行して、「ENOENT」(そのようなファイルまたはディレクトリ)を含む行のファイルio.txtで見ることができます。

0

PyInstallerとDropbox APIは同じエラーを返します(error code 185090050)

この場合、我々はDropoboxのAPIからrest.pyロードするためにpyInstallerのを「伝える」必要があります - >という名前のpyInstallerのフックでファイルを作る: hooks-rest.py、そこに1を入れて!それでは、信頼できる証明書がどこにあるのかをrest.pyに "知らせる"必要があります。 - > TRUSTED_CERT_FILE = os.path.join('location of trusted-certs.crt', 'trusted-certs.crt')

0

私は(pyInstallerのと一緒に)GDATAクライアントを使用して同様の問題に直面していたし、最も簡単な修正はhttplib2モジュールに「ca_certs_locater.py」という名前のファイルを追加することで、ファイルに次のコードに追加:

def get(): 
    return "cacerts.txt" 

Pyinstallerがファイルを見つけられない単純なケースです。httplib2の設計者は、上で強調した方法で独自のパスをcacertsに追加することができます。