我在uwsgi
webserver中通过nginx
运行Django REST API项目。还为HTTPS配置了ssl
。
在项目目录中有证书和密钥文件(如下所示),这有助于建立安全的HTTPS连接。
我已经从浏览器检查过,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设置中是否存在我缺少的东西?或者是否可以使用自签名证书?
检查从外部请求调用内部API的接口。外部请求是Https调用,这是http调用。因此https到/来自http将面临问题。也可以在https调用中转换它们。它可能有所帮助。请发布是否有帮助。