我正在通过uwsgi
在Web服务器中运行Django REST API项目nginx
。 还为 HTTPS 配置了ssl
。
在项目目录中有证书和密钥文件(如下所示(,这有助于建立安全的HTTPS连接。
/- my-project/test-cert.pem /
- my-project/test-cert.钥匙
我已经从浏览器中检查过,https://mysite.domain.com/
正在返回所有API,https://mysite.domain.com/admin/
正在返回Django管理页面。
这意味着 Django 正在正确响应。
我在通过外部 Web URL 调用内部 API 时遇到错误。
https://mysite.domain.com/api/account/
是我的 Web URL,它将在内部调用https://mysite.domain.com/user-list-details/
API。
上述两个API(/api/account/
和/user-list-details/
(在我的Djangourls.py
中都有提及。
顺序是API-1将从我的Angular前端调用,API-2将由DjangoREST在内部调用。 API-2将从数据库获取数据,并通过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 超出最大重复次数:/user-list-details/?query=all&name=Jhon (由 SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败 (_ssl.c:645('(,((
我尝试使用捆绑证书(CERT_1
(,但为此我收到 504 错误。 我尝试了verify=False
虽然不推荐,但收到 504 错误。
我检查过类似的帖子: Python 请求抛出 SSLError 但没有任何出路。
我也从 http://docs.python-requests.org/en/master/user/advanced/
本地证书的私钥必须未加密。目前,请求不支持使用加密密钥。
那么,在 Django 设置中我缺少什么吗? 或者是否可以为此使用自签名证书?
检查从外部请求调用内部 API 的接口。 外部请求是 Https 调用,这个是 http 调用。因此,https到/从http将面临这个问题。在https调用中转换它们。它可能会有所帮助。如果有帮助,请发布。