python - SSL: CERTIFICATE_VERIFY_FAILED Django 在 nginx 网络服务器上通过 uwsgi 运行时出错
问题描述
我正在通过网络服务器运行 Django REST APIuwsgi
项目nginx
。还ssl
为 HTTPS 配置。
在项目目录中有证书和密钥文件(如下),这有助于建立安全的 HTTPS 连接。
- /my-project/test-cert.pem
- /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 设置中缺少什么吗?或者是否可以为此使用自签名证书?
解决方案
检查您从外部请求调用内部 API 的接口。外部请求是 Https 调用,而这个是 http 调用。所以 https to/from http 会面临这个问题。也在 https 调用中转换它们。它可能会有所帮助。如果有帮助请发帖。
推荐阅读
- python - 查找 3D 数组中最大和的位置
- huggingface-transformers - 默认转换器管道中使用了哪些功能?
- angular - 在有角度的 mat-cell 上使用方法
- domain-driven-design - 引用另一个有界上下文的实体时应该使用实体或值对象吗?
- java - java vs groovy中的静态块和变量初始化顺序
- javascript - 如何使用 ReactJs 以百分比形式获取鼠标点击的 X 和 Y 坐标
- java - 为什么 Java 和 VB.NET 从文件中读取的字节不同?
- sshfs - 使用 SSHFS 自动挂载远程文件夹而不授予 shell 访问权限?
- javascript - 从基本 URL 和完整的绝对 URL 确定相对 URL
- ffmpeg - 如何使用 ffmpeg 从 HDR 图像 *.hdr 格式的文件夹中创建 10 位 H.265 或 H.264 Mp4 视频?