我正在尝试让command-line Python starter for Google Plus API正常工作,但在身份验证完成后,我遇到了这个错误:
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`
我试图让这项工作成功的事情:
http://httplib2.googlecode.com/hg-history/6525cadfde53279479533c1235e2661f5c147afc/python2/httplib2/cacerts.txt
的cacerts.txt手动复制到/usr/lib/python2.7/dist-packages/httplib2
httplib2
更新为最新版本0.7.1 httplib2.Http(disable_ssl_certificate_validation=True)
我没有想法,需要你的帮助来解决这个问题。
答案 0 :(得分:1)
如果有人有类似的错误(错误代码185090050):
我使用Dropbox API做了同样的事情。问题是无法加载包含证书信息的文件;在我的情况下,这是因为pyInstaller,它与Dropbox SKD使用的pkg_resources不兼容。只需编辑将Dropbox的rest.py
中的证书分配给以下内容的行:
TRUSTED_CERT_FILE = 'trusted-certs.crt'
而不是使用pkg_resources,并将受信任的证书列表与应用程序一起分发。 Python SSL库显示非常不透明的错误消息,但实际上,它只是一个丢失的文件...
答案 1 :(得分:1)
我对不同的脚本有同样的问题,并认为问题如下:
/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”的行(没有这样的文件或目录)。
答案 2 :(得分:0)
您使用的是哪个python-httplib2版本?
我通过使用python-httplib2 0.7.1-2(Debian Sid)而不是google-api-python-client中的那个来解决这个问题。
答案 3 :(得分:0)
答案 4 :(得分:0)
PyInstaller和Dropbox API提供相同的错误(error code 185090050)
!
在这种情况下,我们必须“告诉”PyInstaller从Dropobox API加载rest.py - &gt;在PyInstaller钩子中创建一个名为的文件:
hooks-rest.py 并将1放在那里!然后我们必须“告诉”rest.py,其中可信证书是 - &gt;
TRUSTED_CERT_FILE = os.path.join('location of trusted-certs.crt', 'trusted-certs.crt')
。
答案 5 :(得分:0)
我在使用gdata客户端(以及Pyinstaller)时遇到了类似的问题,最简单的解决方法是在httplib2模块中添加名为“ca_certs_locater.py”的文件,并在文件中添加以下代码:
def get():
return "cacerts.txt"
这是Pyinstaller找不到文件的一个简单例子,httplib2的设计者允许通过我在上面突出显示的方法添加你自己的cacerts路径。