Це не так просто, як вбудований сервер розробки, але не дуже важко отримати щось близько, використовуючи stunnel як посередник SSLifying між вашим браузером та сервером розробки. Stunnel дозволяє налаштувати на вашій машині легкий сервер, який приймає з'єднання на налаштованому порту, обертає їх SSL та передає їх до іншого сервера. Ми будемо використовувати це для відкриття порту оглушення (8443) і для передачі трафіку, який він отримує, до екземпляра запуску Django.
Спочатку вам знадобиться оглушення, яке можна завантажити тут, або може надати пакетна система вашої платформи (наприклад:) apt-get install stunnel
. Я буду використовувати версію 4 оглушення (наприклад: /usr/bin/stunnel4
на Ubuntu), версія 3 також буде працювати, але має різні параметри конфігурації.
Спочатку створіть каталог у своєму проекті Django, щоб вмістити необхідні файли конфігурації та SSLish.
mkdir stunnel
cd stunnel
Далі нам потрібно створити локальний сертифікат і ключ, який буде використовуватися для зв'язку SSL. Для цього ми звернемося до openssl.
Створіть ключ:
openssl genrsa 1024 > stunnel.key
Створіть сертифікат, який використовує цей ключ (це попросить вас купу інформації, яка буде включена у сертифікат - просто дайте відповідь, що вам здається добре):
openssl req -new -x509 -nodes -sha1 -days 365 -key stunnel.key > stunnel.cert
Тепер об'єднайте їх в один файл, який stunnel використовуватиме для свого SSL-зв’язку:
cat stunnel.key stunnel.cert > stunnel.pem
Створіть конфігураційний файл для оглушення під назвою dev_https із наступним вмістом:
pid=
cert = stunnel/stunnel.pem
sslVersion = SSLv3
foreground = yes
output = stunnel.log
[https]
accept=8443
connect=8001
TIMEOUTclose=1
Цей файл повідомляє stunnel, що він повинен знати. Зокрема, ви говорите йому не використовувати pid-файл, де файл сертифіката, яку версію SSL використовувати, що він повинен працювати на передньому плані, де він повинен реєструвати свій вихід і що він повинен приймати з'єднання на порту 8443 та перенесіть їх до порту 8001. Останній параметр (TIMEOUTclose) повідомляє йому автоматично закривати з'єднання після того, як пройшла 1 секунда без активності.
Тепер перейдіть назад до каталогу проектів Django (той, який у ньому розміщено manag.py):
cd ..
Тут ми створимо скрипт з ім'ям runserver, який запустить оглушення та два сервери розвитку django (один для звичайних з'єднань і один для з'єднань SSL):
stunnel4 stunnel/dev_https &
python manage.py runserver&
HTTPS=1 python manage.py runserver 8001
Давайте розбимо це по черзі:
- Рядок 1: Починає оглушення і вказує на файл, який ми тільки що створили. Це оглушення прослуховує порт 8443, загортає будь-які з'єднання, які він отримує в SSL, і передає їх порту 8001
- Рядок 2: запускає звичайний екземпляр запуску Django (на порту 8000)
- Рядок 3: запускає інший екземпляр запуску Django (на порту 8001) і налаштовує його на обробку всіх вхідних з'єднань так, ніби вони виконувалися за допомогою HTTPS.
Зробіть файл, який ми тільки що створили, виконуваним:
chmod a+x runserver
Тепер, коли ви хочете запустити свій сервер розробки, просто виконайте його ./runserver
з каталогу проектів. Щоб спробувати це, просто наведіть браузер на http: // localhost: 8000 для нормального трафіку HTTP та https: // localhost: 8443 для HTTPS-трафіку. Зауважте, що ваш веб-переглядач майже напевно скаржиться на використаний сертифікат і вимагатиме від вас додати виняток або іншим чином явно доручити браузеру продовжувати перегляд. Це тому, що ви створили власний сертифікат, і браузер не довіряє йому правду про те, хто це. Це добре для розвитку, але очевидно, це не скоротить його для виробництва.
На жаль, на моїй машині цей сценарій runserver не виходить гарним чином, коли я натиснув Ctrl-C. Мені вручну вбивати процеси - хтось має пропозицію виправити це?
Завдяки Майклу Gilė по пошті і Джанго переплетення в запис вікі для довідкового матеріалу.