本文介绍了Django paypalrestsdk错误-OpenSSL.SSL.Error:[("SSL例程","tls_process_server_certificate",“证书验证失败"))的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在Django上编程,并使用paypalrestsdk https://github.com/paypal/PayPal -Python-SDK

I am programming on Django and using paypalrestsdk https://github.com/paypal/PayPal-Python-SDK

我收到此错误:

OpenSSL.SSL.Error: [('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')]

基本上我已经创建了BillingPlan(代码段 https://gist.github.com/axilaris/2f9cf8f5c27a8a2095 ),然后出现:

Basically I have created BillingPlan(code snippet https://gist.github.com/axilaris/2f9cf8f5c27a8a2095c5c9abf0dc4121), and this appears:

Payment created successfully
2018-05-08 22:44:45,358 INFO Request[POST]: https://api.sandbox.paypal.com/v1/oauth2/token
2018-05-08 22:44:45,358 DEBUG Level: sandbox
2018-05-08 22:44:45,358 DEBUG Request:
Headers: {'Authorization': 'Basic QVZ2cEhjMExScXFkcEFQZy1QZm1DU19jVlFNYTV1V3lsaXpBMXRpMDRjcm4tZF9jbWdyVFF5N0ZQOVZOcnlfdXRZN0IwZk91cEJSQlluVzM6RUpIcV9GLWwxbmNJLTY3YmFLYmREcWRJMVMtcGNOWkxwWjdvX29mcG10eGQ4ZlVRM2drQTFQR1J5ZzBOZER6VDY1dE5URlY2Y29lWDVVdHM=', 'Content-Type': 'application/x-www-form-urlencoded', 'Accept': 'application/json', 'User-Agent': 'PayPalSDK/PayPal-Python-SDK 1.13.1 (requests 2.12.1; python 3.6.3; OpenSSL 1.0.2k 26 Jan 2017)', 'PayPal-Request-Id': 'b337cb66-b036-4a0a-9f70-aaa7011e73bb'}
Body: grant_type=client_credentials
2018-05-08 22:44:45,362 DEBUG Starting new HTTPS connection (1): api.sandbox.paypal.com
From cffi callback <function _verify_callback at 0x12972a268>:
Traceback (most recent call last):
File "/Users/some/Documents/project/somedotcom/somedotcomenv/lib/python3.6/site-packages/OpenSSL/SSL.py", line 313, in wrapper
_lib.X509_up_ref(x509)
...
File "/Users/some/Documents/project/somedotcom/somedotcomenv/lib/python3.6/site-packages/OpenSSL/_util.py", line 54, in exception_from_error_queue
raise exception_type(errors)
OpenSSL.SSL.Error: [('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')]

有关跟踪的更多详细信息,请参见: https://gist.github.com/axilaris/c181aaaa8261add4240fb2d042bd1ffc

more complete detail of the traces can be found here:https://gist.github.com/axilaris/c181aaaa8261add4240fb2d042bd1ffc

如何解决此错误?谢谢.

How do I resolve this error ? Thanks.

我的环境:

pyOpenSSL==17.5.0
paypalrestsdk==1.13.1
Django==1.11.7
cryptography==2.1.3

推荐答案

PayPal的API 需要TLS 1.2 ,我的猜测是您安装的OpenSSL的基础版本太旧了,无法支持它.

PayPal's APIs require TLS 1.2 and my guess is that your underlying installed version of OpenSSL is a bit too old to support it.

使用以下命令确定您安装的OpenSSL版本:

Use the following to determine what version of OpenSSL you've got installed:

>>> import ssl
>>> print ssl.OPENSSL_VERSION
OpenSSL 1.0.2m  2 Nov 2017

如果您的版本低于1.0.1,则可能需要对其进行升级.以我的经验,Mac OS X可能具有相当陈旧的版本.我认为我的低至0.9.8.

If you're on anything lower than 1.0.1, you'll likely want to upgrade it using brew. In my experience, Mac OS X can have quite antiquated versions of it; I think mine was as low as 0.9.8.

一旦您升级了OpenSSL并确认在python shell中可以看到新版本,则可以通过运行代码对其进行测试.如果仍然无法正常工作,我建议运行以下命令以获取有关连接运行状况的更多详细信息:

Once you've upgraded OpenSSL and confirmed that in the python shell you see the new version, you can test it by running your code. If it still doesn't work, I suggest running the following to get some more fine-grained detail on the connection health:

openssl s_client -showcerts -connect api.sandbox.paypal.com:443

这篇关于Django paypalrestsdk错误-OpenSSL.SSL.Error:[("SSL例程","tls_process_server_certificate",“证书验证失败"))的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

05-23 21:39