在我的本地环境下使用Braintree SDK会在dev_appserver.py
上返回以下错误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'))
我也试过在黑客main.py
的布伦特里的Python-AppEngine上项目,但我得到同样的SSL错误讯息回来。
requests
on https://www.braintreepayments.com/
return 200,没有任何错误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 ...
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句