[英]Braintree SDK SSLCertificateError on AppEngine local dev server
在我的本地dev_appserver.py
下使用Braintree SDK在Braintree.ClientToken.generate 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
中的hack,但是我得到了相同的SSL錯誤消息。
https://www.braintreepayments.com/
上使用requests
將返回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 ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.