1

我正在尝试让用于 Google Plus API 的命令行 Python 启动器工作,但在身份验证完成后,我遇到了这个错误:

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. 在从入门工具包 (plus_cli.py) 中的文件进行的所有 httplib2 调用中禁用 SSL,使用httplib2.Http(disable_ssl_certificate_validation=True)

我没有想法,需要你的帮助来解决这个问题。

4

6 回答 6

1

我在使用不同的脚本时遇到了同样的问题,并认为问题如下:

  1. 在安装 google api for python one(或多或少)时,还会自动安装 httplib2 的一个版本
  2. 这个版本有问题。一方面是 cacerts.txt 文件(在我的系统上位于下面

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

仅根可读。但实际的问题似乎是该包寻找一个不存在的“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”的行(没有这样的文件或目录)。

于 2013-08-11T20:08:02.833 回答
1

如果有人遇到类似错误(错误代码 185090050):

我使用 Dropbox API 也有同样的情况。问题是无法加载包含证书信息的文件;就我而言,这是因为 pyInstaller 与 Dropbox SKD 使用的 pkg_resources 不兼容。只需编辑将 Dropbox 中的证书分配给rest.py以下内容的行:

TRUSTED_CERT_FILE =  'trusted-certs.crt'

而不是使用 pkg_resources,并将受信任的证书列表与应用程序一起分发。Python SSL 库显示非常不透明的错误消息,但实际上,它只是缺少文件的东西......

于 2012-05-10T06:16:19.040 回答
0

PyInstaller 和 Dropbox API 给出同样的错误(error code 185090050)

在这种情况下,我们必须“告诉”PyInstaller 从 Dropobox API 加载 rest.py -> 在 PyInstaller 挂钩中创建一个文件,命名为: hooks-rest.py并将 1 放在那里!然后我们必须“告诉”rest.py 可信证书在哪里 -> TRUSTED_CERT_FILE = os.path.join('location of trusted-certs.crt', 'trusted-certs.crt')

于 2014-11-01T06:36:01.447 回答
0

您使用的是哪个 python-httplib2 版本?

我通过使用 python-httplib2 0.7.1-2 (Debian Sid) 而不是 google-api-python-client 中的那个解决了这个问题。

于 2011-09-19T09:04:09.727 回答
0

这看起来像这个错误:http ://code.google.com/p/google-api-python-client/issues/detail?id=58

于 2011-09-20T00:08:15.363 回答
0

我在使用 gdata 客户端(以及 Pyinstaller)时遇到了类似的问题,最简单的解决方法是在 httplib2 模块中添加一个名为“ca_certs_locater.py”的文件,并在文件中添加以下代码:

def get():
    return "cacerts.txt"

这是 Pyinstaller 找不到文件的简单案例,httplib2 的设计者允许通过我上面强调的方法将您自己的路径添加到 cacerts 的情况。

于 2016-03-12T14:53:13.863 回答