SSL: CERTIFICATE_VERIFY_FAILED Ошибка в Django, работающем через uwsgi на веб-сервере nginx - PullRequest
0 голосов
/ 10 сентября 2018

Я запускаю проект Django REST API через uwsgi в 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 отвечает правильно.

Я сталкиваюсь с ошибкой при вызове моих внутренних 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?или для этого можно использовать самозаверяющий сертификат ?

1 Ответ

0 голосов
/ 10 сентября 2018

Проверьте интерфейс, где вы вызываете внутренние API из внешних запросов.Внешние запросы - это вызов Https, а этот - вызов http.Так что https в / из http столкнется с проблемой.Конвертируйте их также в вызове https.Это может помочь.Пожалуйста, напишите, если это поможет.

...