Нужно исправить ошибку SSL в стартовом комплекте Python для командной строки API Google Plus, работающем на локальном хосте - PullRequest
1 голос
/ 17 сентября 2011

Я пытаюсь заставить * Python Starter командной строки для API Google Plus работать , но после завершения аутентификации я сталкиваюсь с этой ошибкой:

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 использует httplib2 для отправки запросов.Я запускаю стартовый комплект из localhost.


Вот дамп терминала:

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`

То, что я пытался заставить это работать:

  1. Скопированный вручную cacerts.txt из http://httplib2.googlecode.com/hg-history/6525cadfde53279479533c1235e2661f5c147afc/python2/httplib2/cacerts.txt в /usr/lib/python2.7/dist-packages/httplib2
  2. Обновлен httplib2 до последней версии 0.7.1
  3. Отключен SSL во всех выполненных вызовах httplib2из файлов в стартовом наборе (plus_cli.py), используя httplib2.Http(disable_ssl_certificate_validation=True)

У меня нет идей, и мне нужна ваша помощь в решении этой проблемы.

Ответы [ 6 ]

1 голос
/ 12 августа 2013

У меня была та же проблема с другим скриптом, и я думаю, что проблема заключается в следующем:

  1. при установке Google API для Python One (более или менее) автоматически также устанавливается версия httplib2
  2. эта версия глючит. Во-первых, файл cacerts.txt (который в моей системе находится ниже

/ usr / local / lib / python2.7 / dist-packages / httplib2-0.8-py2.7.egg / httplib2)

только для чтения с правами root. Но реальная проблема заключается в том, что пакет ищет «ca_certs_locatermodule», который не существует.

Поскольку в моей системе httplib2 все равно установлен как собственный пакет (как, впрочем, и у вас), переместите эту ошибочную версию httplib2 (т.е. папку

).

/ usr / local / lib / python2.7 / dist-packages / httplib2-0.8-py2.7.egg)

решил проблему. Чтобы отследить эту проблему, вы можете запустить

strace -o io.txt python your_script.py

и найдите в файле io.txt строки, содержащие «ENOENT» (такого файла или каталога нет).

1 голос
/ 10 мая 2012

В случае, если у кого-то есть похожая ошибка (код ошибки 185090050):

У меня было то же самое с использованием API Dropbox. Проблема заключалась в том, что файл, содержащий информацию сертификата, не мог быть загружен; в моем случае это было из-за pyInstaller, который не совместим с pkg_resources, используемым Dropbox SKD. Просто отредактируйте строку, которая присваивает сертификат в Dropbox's rest.py следующему:

TRUSTED_CERT_FILE =  'trusted-certs.crt'

вместо использования pkg_resources и распространять список доверенных сертификатов вместе с приложением. Библиотека Python SSL отображает очень непрозрачные сообщения об ошибках, но на самом деле это просто отсутствующий файл ...

0 голосов
/ 12 марта 2016

Я столкнулся с аналогичной проблемой при использовании клиента gdata (вместе с Pyinstaller), и самое простое решение - добавить файл с именем ca_certs_locater.py в модуль httplib2 и добавить следующий код в файл:

def get():
    return "cacerts.txt"

Это простой случай, когда Pyinstaller не находит файл, и разработчики httplib2 допускают случай добавления вашего собственного пути к каскадам с помощью метода, который я выделил выше.

0 голосов
/ 01 ноября 2014

PyInstaller и Dropbox API выдают одинаковую ошибку (error code 185090050)!

В этом случае мы должны «сказать» PyInstaller, чтобы он загружал rest.py из API Dropobox -> создавал файл в хуках PyInstaller с именем: hooks-rest.py и поставьте туда 1!Затем мы должны «сообщить» rest.py, где находятся доверенные сертификаты -> TRUSTED_CERT_FILE = os.path.join('location of trusted-certs.crt', 'trusted-certs.crt').

0 голосов
/ 20 сентября 2011

Это похоже на эту ошибку: http://code.google.com/p/google-api-python-client/issues/detail?id=58

0 голосов
/ 19 сентября 2011

какую версию python-httplib2 вы используете?

Я решил эту проблему, используя python-httplib2 0.7.1-2 (Debian Sid) вместо того, который был в google-api-python-client.

...