SSL:CERTIFICATE_VERIFY_FAILED在nginx webserver上通过uwsgi运行的Django出错

问题描述 投票:2回答:1

我在uwsgi webserver中通过nginx运行Django REST API项目。还为HTTPS配置了ssl

在项目目录中有证书和密钥文件(如下所示),这有助于建立安全的HTTPS连接。

  1. /没有-project/test-cert.PE们
  2. /没有-project/test-cert.key

我已经从浏览器检查过,https://mysite.domain.com/正在返回所有API,而https://mysite.domain.com/admin/正在返回Django Admin页面。

这意味着Django正在做出正确的响应。

我通过外部网址调用我的内部API时遇到错误。

https://mysite.domain.com/api/account/是我的网址,它将在内部调用https://mysite.domain.com/user-list-details/api。

我的Django /api/account/中提到了上述API(/user-list-details/urls.py)。

顺序是API-1将从我的Angular前端调用,而API-2将由Django REST在内部调用。 API-2将从DB获取数据并通过API-1返回Angular。

这个结构基本上是为了服务于我们的业务逻辑而设计的,并且对我的项目的HTTP版本工作正常,但现在我在实现HTTPS后面临问题。

内部API调用的示例代码:

import requests

# I have tried with three different certificates available. 

CERT_1 = '/etc/ssl/certs/ca-bundle.crt'
CERT_2 = '/my-project/test-cert.pem'
CERT_3 = '/tech/lib/python3.5/site-packages/certifi/cacert.pem'

url = 'https://mysite.domain.com/user-list-details/'
apisession = requests.Session()
response = apisession.get(url, verify=CERT_1) # <= Error in this line

错误:

HTTPSConnectionPool(host ='',port = 443);使用url超出Max reties:/ user-list-details /?query = all&name = Jhon(由SSLError引起(SSLError(1,'[SSL:CERTIFICATE_VERIFY_FAILED]证书验证失败(_ssl.c:645)'),))

我已经尝试使用捆绑证书(CERT_1),但为此我得到504错误。我试过verify=False虽然不推荐,但得到504错误。

我已经检查了类似的帖子:Python Requests throwing SSLError但没有任何出路。

我也从http://docs.python-requests.org/en/master/user/advanced/那里学到了东西

本地证书的私钥必须未加密。目前,请求不支持使用加密密钥。

那么,Django设置中是否存在我缺少的东西?或者是否可以使用自签名证书?

python django python-requests ssl-certificate uwsgi
1个回答
0
投票

检查从外部请求调用内部API的接口。外部请求是Https调用,这是http调用。因此https到/来自http将面临问题。也可以在https调用中转换它们。它可能有所帮助。请发布是否有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.