AppEngine Paypal集成使用Python在本地主机上提供SSLCertificateError
我正在整合我的AppEngine项目。当使用我的本地dev_appserver尝试在PayPal沙箱上创建付款时,出现以下错误:AppEngine Paypal集成使用Python在本地主机上提供SSLCertificateError,python,google-app-engine,ssl-certificate,paypal-rest-sdk,dev-appserver-2,Python,Google App Engine,Ssl Certificate,Paypal Rest Sdk,Dev Appserver 2,我正在整合我的AppEngine项目。当使用我的本地dev_appserver尝试在PayPal沙箱上创建付款时,出现以下错误: SSLCertificateError: Invalid and/or missing SSL certificate for URL: https://api.sandbox.paypal.com/v1/oauth2/token 因此,我尝试提供正确的pem文件,从下载并设置正确的ssl\u选项属性: # Setting up the correct path t
SSLCertificateError: Invalid and/or missing SSL certificate for URL: https://api.sandbox.paypal.com/v1/oauth2/token
因此,我尝试提供正确的pem文件,从下载并设置正确的ssl\u选项
属性:
# 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上,这一切都可以完美地运行
以下是my 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
有人有相同的问题吗?好的,我相信我已经解决了这个问题,至少在我的案例中,我将在下面描述 这似乎是由于两个问题: 问题#1)PayPal正在迁移到仅支持TLS1.2,并已开始切换沙箱URL,稍后将切换生产URL。这就解释了为什么只有在从沙箱连接时才会出现故障,以及为什么它过去可以工作,但现在不行了。更多关于这个 问题2)我在本地安装的Python不支持TLS1.2。以下是一种简单的检查方法:
$ python
>>> import ssl
>>> print ssl._PROTOCOL_NAMES
如果没有列出协议\u TLSv1\u 2
,这肯定是问题所在。在我的例子中,我使用的是MacOSX10.11上Python的内置版本,它在OpenSSL上有一个非常旧的内置版本
那么如何修复它呢?嗯,在我的例子中,这很有效(主要是抄袭自):
现在,如果您运行上面列出的测试,您应该会看到列出的1.2协议
这会让一切恢复正常,祝你好运 好的,我相信我已经解决了这个问题,至少在我的案例中,我将在下面描述 这似乎是由于两个问题: 问题#1)PayPal正在迁移到仅支持TLS1.2,并已开始切换沙箱URL,稍后将切换生产URL。这就解释了为什么只有在从沙箱连接时才会出现故障,以及为什么它过去可以工作,但现在不行了。更多关于这个 问题2)我在本地安装的Python不支持TLS1.2。以下是一种简单的检查方法:
$ python
>>> import ssl
>>> print ssl._PROTOCOL_NAMES
如果没有列出协议\u TLSv1\u 2
,这肯定是问题所在。在我的例子中,我使用的是MacOSX10.11上Python的内置版本,它在OpenSSL上有一个非常旧的内置版本
那么如何修复它呢?嗯,在我的例子中,这很有效(主要是抄袭自):
现在,如果您运行上面列出的测试,您应该会看到列出的1.2协议
这会让一切恢复正常,祝你好运 我也有同样的问题。它肯定曾经在我的设置中起作用,我没有改变代码中的任何内容来破坏它。我也有同样的问题。它肯定曾经在我的设置中起作用,我没有在代码的这一部分做任何修改来破坏它。