【问题标题】:Braintree SDK SSLCertificateError on AppEngine local dev serverAppEngine 本地开发服务器上的 Braintree SDK SSLCertificateError
【发布时间】:2017-11-20 09:48:49
【问题描述】:

在我的本地dev_appserver.py 下使用Braintree SDK 在braintree.ClientToken.generate() 上返回以下错误:

SSLError: SSLCertificateError:
Invalid and/or missing SSL certificate for URL:  
https://api.sandbox.braintreegateway.com:443/merchants/<merchant_id>/client_token

我在服务器启动时使用requests_toolbelt:

# Make requests work in GAE
import requests
from requests_toolbelt.adapters import appengine
appengine.monkeypatch()

明确排除 SSL 验证也不起作用(返回相同的错误消息):

appengine.monkeypatch(validate_certificate=False)

事实上,没有requests_toolbelt,我调用.generate()时得到的错误是:

ProtocolError('Connection aborted.', error(13, 'Permission denied'))

我还在braintree-python-appengine 项目的main.py 中尝试了破解,但我得到了相同的 SSL 错误消息。

我的开发环境:

  • MacOSX 10.11.6
  • gcloud 应用 Python 扩展 1.9.63
  • Python 2.7.10
  • 请求==2.18.4
  • braintree==3.39.0
  • 烧瓶==0.12.2

注意:

  1. 部署到 Google App Engine 后,我可以毫无问题地取回客户端令牌
  2. 在https://www.braintreepayments.com/ 上直接使用requests 会返回200 而不会出现任何错误

【问题讨论】:

    标签: python google-app-engine braintree braintree-sandbox


    【解决方案1】:

    Braintree 支持人员 (2017-11-20) 回复了我的询问:

    您收到的错误通常与您的应用运行时使用的 SSL/TLS 协议有关;我们的沙盒环境要求通过 TLS 1.2 建立连接,这一要求尚未应用于生产环境。

    从审查来看,应用在本地部署时使用的协议似乎对我们的环境无效。如果应用程序设置在 Google App Engine 中本地化,这可能是问题的原因; Python 使用系统提供的 OpenSSL,而 TLSv1.2 需要 OpenSSL 1.0.1c 或更高版本。

    所以根本原因是我的 Python 版本使用了旧版本的 OpenSSL:

    $ python --version
    Python 2.7.10
    
    $ python
    >> import ssl
    >> ssl.OPENSSL_VERSION
    >> 'OpenSSL 0.9.8zh 14 Jan 2016'
    

    解决办法是通过brew升级我的python版本:

    $ brew install python
    $ python2 --version
    Python 2.7.14
    
    $ python2
    >> import ssl
    >> ssl.OPENSSL_VERSION
    >> 'OpenSSL 1.0.2m  2 Nov 2017'
    

    然后,使用新安装的 python 启动我的开发服务器解决了SSLCertificateError:

    python2 $appserver_path/dev_appserver.py ...
    

    【讨论】:

      猜你喜欢
      • 2017-08-09
      • 2019-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-01
      相关资源
      最近更新 更多