通过 Oauth 进行身份验证时 SSL 抛出错误 185090050

Posted

技术标签:

【中文标题】通过 Oauth 进行身份验证时 SSL 抛出错误 185090050【英文标题】:SSL throwing error 185090050 while authentication via Oauth 【发布时间】:2013-03-19 18:11:30 【问题描述】:

我正在尝试使用 Google 的 Oauth 连接到 Google adsense 并收到此错误。 有什么解决办法吗?

有人在python中遇到过这样的问题吗?

    Traceback (most recent call last):
    File "get_all_saved_reports.py", line 56, in <module>
      main(sys.argv)
    File "get_all_saved_reports.py", line 36, in main
        service = sample_utils.initialize_service()
    File "/home/nish/Programs/python/google-adsense/samples/adsense/sample_utils.py", line 114, in initialize_service
        credentials = prepare_credentials()
    File "/home/nish/Programs/python/google-adsense/samples/adsense/sample_utils.py", line 95, in prepare_credentials
        credentials = run(FLOW, storage)
      File "/usr/local/lib/python2.7/dist-packages/oauth2client-1.1-py2.7.egg/oauth2client/util.py", line 128, in positional_wrapper
        return wrapped(*args, **kwargs)
      File "/usr/local/lib/python2.7/dist-packages/oauth2client-1.1-py2.7.egg/oauth2client/tools.py", line 197, in run
        credential = flow.step2_exchange(code, http=http)
      File "/usr/local/lib/python2.7/dist-packages/oauth2client-1.1-py2.7.egg/oauth2client/util.py", line 128, in positional_wrapper
        return wrapped(*args, **kwargs)
      File "/usr/local/lib/python2.7/dist-packages/oauth2client-1.1-py2.7.egg/oauth2client/client.py", line 1283, in step2_exchange
        headers=headers)
      File "/usr/local/lib/python2.7/dist-packages/httplib2-0.8-py2.7.egg/httplib2/__init__.py", line 1571, in request
        (response, content) = self._request(conn, authority, uri, request_uri, method, body, headers, redirections, cachekey)
      File "/usr/local/lib/python2.7/dist-packages/httplib2-0.8-py2.7.egg/httplib2/__init__.py", line 1318, in _request
        (response, content) = self._conn_request(conn, request_uri, method, body, headers)
      File "/usr/local/lib/python2.7/dist-packages/httplib2-0.8-py2.7.egg/httplib2/__init__.py", line 1253, in _conn_request
        conn.connect()
      File "/usr/local/lib/python2.7/dist-packages/httplib2-0.8-py2.7.egg/httplib2/__init__.py", line 1022, in connect
        self.disable_ssl_certificate_validation, self.ca_certs)
      File "/usr/local/lib/python2.7/dist-packages/httplib2-0.8-py2.7.egg/httplib2/__init__.py", line 80, in _ssl_wrap_socket
    cert_reqs=cert_reqs, ca_certs=ca_certs)
  File "/usr/lib/python2.7/ssl.py", line 381, in wrap_socket
    ciphers=ciphers)
  File "/usr/lib/python2.7/ssl.py", line 141, in __init__
    ciphers)
ssl.SSLError: [Errno 185090050] _ssl.c:340: error:0B084002:x509 certificate routines:X509_load_cert_crl_file:system lib

【问题讨论】:

你可能想检查这个线程:github.com/kennethreitz/requests/issues/557 我在发布之前查看了它。它没有帮助我 【参考方案1】:

我在使用 Python 2.7.5 的 oauth2(针对 Twitter API,而不是 Google)中遇到了这个确切的 x509 错误,并使用了 Akshay Valsa 的建议并更改了 cacerts.txt 的权限

chmod 644 /usr/local/lib/python2.7/dist-packages/httplib2-0.8-py2.7.egg/httplib2/cacerts.txt

这解决了问题,我现在可以以普通用户身份运行我的模块,而不是 sudo 。 谢谢!

【讨论】:

在 Yosemite(10.10.1) 中,根据您的 Python 版本,文件位于 /Library/Python/2.7/site-packages/httplib2-0.9-py2.7.egg/httplib2/ cacerts.txt 像魅力一样为我工作!谢谢【参考方案2】:

加载证书文件时出现此问题。如果您以 root 用户运行程序,此问题将得到解决。 或者您可以检查文件的权限:/usr/local/lib/python2.7/dist-packages/httplib2-0.8-py2.7.egg/httplib2/cacerts.txt,并为此文件提供必要的权限。

【讨论】:

【参考方案3】:

在我的例子中,我运行的是 Django 开发服务器。如果服务器在切换到虚拟环境之前运行,我发现 [Errno 185090050] _ssl.c:345: error:0B084002:x509 certificate routines:X509_load_cert_crl_file:system lib 在我的回溯中。简而言之,我不再运行创建证书的 httplib2 版本:我可能正在运行 dist-package。 (Ububtu 13.10)、Python 2.7、Django 1.62。希望这对其他人有帮助。

【讨论】:

【参考方案4】:

我想出了解决办法。 Google OAuth 太难理解了,我不得不第一次以 sudo/root 身份运行脚本。那行得通。还要确保权限设置正确。

【讨论】:

你能详细说明一下吗?我也有同样的问题 确保你有root权限来执行。 没有那么简单。我一直很高兴地以普通用户身份进行授权,然后遇到了这个问题,sudoing 并不能解决问题。

以上是关于通过 Oauth 进行身份验证时 SSL 抛出错误 185090050的主要内容,如果未能解决你的问题,请参考以下文章

OAuth 2.0 两腿身份验证与 SSL/TLS

尝试通过 oauth 进行身份验证时访问被拒绝

通过 /oauth/authorize 进行身份验证时跳过重定向到登录页面

使用 oAuth 和 youtube 进行身份验证时,总是出现错误:invalid_grant on 2nd auth attempt,为啥?

使用 Twitch 进行身份验证时的 Spring-Boot OAuth2 奇怪行为

像 Facebook 一样的 OAuth 身份验证