首页 > 解决方案 > SSL: CERTIFICATE_VERIFY_FAILED Django 在 nginx 网络服务器上通过 uwsgi 运行时出错

问题描述

我正在通过网络服务器运行 Django REST APIuwsgi项目nginx。还ssl为 HTTPS 配置。

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

  1. /my-project/test-cert.pem
  2. /my-project/test-cert.KEY

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

这意味着 Django 正在正确响应。

我在通过外部 Web URL 调用内部 API 时遇到错误。

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

我的 Django 中提到了上述两个 API ( /api/account/& ) 。/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(主机='',端口=443);url: /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 but didn't get any out out。

我还从http://docs.python-requests.org/en/master/user/advanced/学到了

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

那么,我在 Django 设置中缺少什么吗?或者是否可以为此使用自签名证书

标签: pythondjangopython-requestsssl-certificateuwsgi

解决方案


检查您从外部请求调用内部 API 的接口。外部请求是 Https 调用,而这个是 http 调用。所以 https to/from http 会面临这个问题。也在 https 调用中转换它们。它可能会有所帮助。如果有帮助请发帖。


推荐阅读