Я запускаю проект Django REST API через uwsgi
в 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 отвечает правильно.
Я сталкиваюсь с ошибкой при вызове моих внутренних API через внешние веб-URL.
https://mysite.domain.com/api/account/
- это мой веб-URL, который будет вызыватьhttps://mysite.domain.com/user-list-details/
API внутри.
Оба вышеупомянутых API (/api/account/
& /user-list-details/
) упомянуты в моем Django urls.py
.
Последовательность состоит в том, что API-1 будетвызывается из моего внешнего интерфейса Angular, а API-2 будет вызываться Django REST изнутри .API-2 будет извлекать данные из БД и возвращаться в Angular через API-1.
Эта структура в основном разработана для использования в целях нашей бизнес-логики и отлично работала для 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 ='', порт = 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 запрашивает выбрасывание SSLError , но не нашел выхода.
Я также узнал от http://docs.python -requests.org / ru / master / user / advanced /
Закрытый ключ вашего локального сертификата должен быть незашифрованным.В настоящее время Requests не поддерживает использование зашифрованных ключей.
Итак, что-то мне не хватает в настройках Django?или для этого можно использовать самозаверяющий сертификат ?