我正在将帕帕雷斯茨集成到AppEngine项目中。当使用本地dev_appserver时,我试图在PayPal沙箱上创建一个支付,我有以下错误:
SSLCertificateError: Invalid and/or missing SSL certificate for URL: https://api.sandbox.paypal.com/v1/oauth2/token因此,我尝试提供正确的pem文件,从这里下载它并设置正确的ssl_option属性:
# Setting up the correct path to the .pem file
cert = os.path.join(ROOT, 'certs/api.sandbox.paypal.com_SHA-2_01132018.pem')
logger.info("Using SSL certificate: %s", cert)
return Api(
mode=get_paypal_environment(), # sandbox or live
client_id=flask.current_app.config["PAYPAL_CLIENT_ID"],
client_secret=flask.current_app.config["PAYPAL_CLIENT_SECRET"],
ssl_options={"cert": cert}
)这里有关于如何提供证书的详细信息的PayPalRestSDK文档。我已经检查了创建的路径是否正确。
我已经找到了一个bug报告这里,它谈到了一个类似的问题。
此外,我已经尝试了建议的解决方案这里,但仍然不起作用。
在一个活动实例上,在appspot上,这一切都完美地工作在上。
下面是我的requirements.txt的相关部分:
Flask==0.10.1
itsdangerous==0.24
paramiko==1.15.1
pycrypto==2.6.1
Flask-OAuthlib==0.9.1
google-api-python-client==1.4.0
paypalrestsdk==1.11.1
requests[security]==2.9.1有人有同样的问题吗?
发布于 2016-02-27 07:16:09
好的,我相信我已经解决了这个问题,至少在我的情况下,我会在下面描述。
这似乎是由两个问题造成的:
问题1) PayPal正在迁移到只支持TLS1.2,并且已经开始切换沙箱URL,生产URL将在稍后出现。这就解释了为什么只有在从沙箱连接时才会出现故障,以及为什么它曾经工作过,但现在却不起作用。关于这个这里的更多信息。
问题2)我本地安装的Python不支持TLS 1.2。下面是一个简单的检查方法:
$ python
>>> import ssl
>>> print ssl._PROTOCOL_NAMES如果您没有看到PROTOCOL_TLSv1_2列出,这绝对是问题所在。在我的例子中,我在MacOSX10.11上使用Python上的内置版本,该版本在OpenSSL上内置了一个相当老的版本。
那怎么解决呢?好吧,在我的例子中,这很好用(主要是从这里复制的):
$ brew update
$ brew install openssl
$ brew link openssl --force
$ brew install python --with-brewed-openssl
$ sudo ln -s /usr/local/Cellar/python/2.7.11/bin/python /usr/local/bin/python现在,如果您运行上面列出的测试,您应该会看到列出的1.2协议。
这会让一切恢复正常,祝你好运!
https://stackoverflow.com/questions/35589523
复制相似问题