Это не , а просто, как встроенный сервер разработки, но не так уж сложно найти что-то близкое, используя stunnel в качестве посредника SSLifying между вашим браузером и сервером разработки. Stunnel позволяет вам настроить облегченный сервер на вашем компьютере, который принимает соединения через настроенный порт, оборачивает их с помощью SSL и передает их на какой-либо другой сервер. Мы будем использовать это, чтобы открыть порт stunnel (8443) и передать любой трафик, который он получает, к экземпляру сервера выполнения Django.
Сначала вам понадобится stunnel, который можно загрузить здесь или который может быть предоставлен системой пакетов вашей платформы (например: apt-get install stunnel
). Я буду использовать версию 4 Stunnel (например, /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
Создайте файл конфигурации для stunnel с именем 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 (тот, в котором есть manage.py):
cd ..
Здесь мы создадим скрипт с именем runserver, который будет запускать stunnel и два сервера разработки django (один для обычных соединений и один для соединений SSL):
stunnel4 stunnel/dev_https &
python manage.py runserver&
HTTPS=1 python manage.py runserver 8001
Давайте разберем это, построчно:
- Строка 1: запускает stunnel и указывает на файл конфигурации, который мы только что создали. В нем есть stunnel listen для порта 8443, оберните все соединения, которые он получает в SSL, и передайте их через порт 8001
- Строка 2: запуск обычного экземпляра сервера запуска Django (на порту 8000)
- Строка 3: запускает другой экземпляр сервера запуска Django (на порту 8001) и настраивает его так, чтобы он обрабатывал все входящие подключения, как если бы они выполнялись с использованием HTTPS.
Сделать исполняемый файл, с которым мы только что создали, исполняемым:
chmod a+x runserver
Теперь, когда вы хотите запустить сервер разработки, просто выполните ./runserver
из каталога вашего проекта. Чтобы проверить это, просто укажите в своем браузере http://localhost:8000 для обычного HTTP-трафика и https://localhost:8443 для HTTPS-трафика. Обратите внимание, что ваш браузер почти наверняка будет жаловаться на используемый сертификат и потребует, чтобы вы добавили исключение или иным образом явно указали браузеру продолжить просмотр. Это потому, что вы создали свой собственный сертификат, и браузер не может сказать правду о том, кто он. Это хорошо для разработки, но, очевидно, не подойдет для производства.
К сожалению, на моем компьютере этот скрипт сервера запуска не выходит из строя, когда я нажимаю Ctrl-C. Я должен вручную убить процессы - у кого-нибудь есть предложение, чтобы это исправить?
Спасибо посту Майкла Джайла и вики-записи django-weave за справочный материал.