У меня есть приложение, использующее «безопасные» файлы cookie, и я хочу протестировать его функциональность без необходимости настраивать сложный сервер разработки с поддержкой SSL. Есть ли способ сделать это так же просто, как я могу тестировать незашифрованные запросы с помощью ./manage.py runserver
?
109
Ответы:
Это не так просто, как встроенный сервер разработки, но не так уж сложно получить что-то близкое, используя stunnel в качестве SSL-посредника между вашим браузером и сервером разработки. Stunnel позволяет вам настроить легкий сервер на вашем компьютере, который принимает соединения через настроенный порт, обертывает их с помощью SSL и передает их другому серверу. Мы будем использовать это, чтобы открыть порт stunnel (8443) и передать любой трафик, который он получает, экземпляру сервера запуска Django.
Сначала вам понадобится stunnel, который можно скачать здесь или который может быть предоставлен системой пакетов вашей платформы (например :)
apt-get install stunnel
. Я буду использовать stunnel версии 4 (например,/usr/bin/stunnel4
в Ubuntu), версия 3 также будет работать, но имеет другие параметры конфигурации.Сначала создайте каталог в вашем проекте Django, чтобы хранить необходимые файлы конфигурации и материалы SSLish.
Затем нам нужно создать локальный сертификат и ключ, которые будут использоваться для связи SSL. Для этого обратимся к openssl.
Создайте ключ:
Создайте сертификат, который использует этот ключ (вам будет предложено множество информации, которая будет включена в сертификат - просто ответьте тем, что вам нравится):
Теперь объедините их в один файл, который stunnel будет использовать для связи SSL:
Создайте файл конфигурации для stunnel с именем dev_https со следующим содержимым:
Этот файл сообщает stunnel то, что ему нужно знать. В частности, вы говорите ему не использовать файл pid, где находится файл сертификата, какую версию SSL использовать, что он должен работать на переднем плане, где он должен регистрировать свой вывод и что он должен принимать соединение на порту 8443 и переместите их к порту 8001. Последний параметр (TIMEOUTclose) указывает ему автоматически закрыть соединение через 1 секунду бездействия.
Теперь вернитесь в каталог проекта Django (тот, в котором есть manage.py):
Здесь мы создадим сценарий с именем runserver, который будет запускать stunnel и два сервера разработки django (один для обычных подключений, а другой для SSL-подключений):
Давайте разберем это построчно:
Сделайте только что созданный файл runscript исполняемым с помощью:
Теперь, когда вы хотите запустить сервер разработки, просто выполните его
./runserver
из каталога проекта. Чтобы попробовать, просто укажите в браузере http: // localhost: 8000 для обычного HTTP-трафика и https: // localhost: 8443 для HTTPS-трафика. Обратите внимание, что ваш браузер почти наверняка будет жаловаться на используемый сертификат и потребовать от вас добавить исключение или иным образом явно указать браузеру продолжить просмотр. Это потому, что вы создали свой собственный сертификат, и браузер не верит, что он говорит правду о том, кто это. Это хорошо для разработки, но, очевидно, не подойдет для производства.К сожалению, на моей машине этот сценарий runserver не завершается нормально, когда я нажимаю Ctrl-C. Мне нужно вручную убить процессы - у кого-нибудь есть предложения, как это исправить?
Благодаря Майклу Gilė по почте и Джанго переплетения в запись вики для справочного материала.
источник
request.is_secure()
отправит отчетTrue
. Если вам это не нужно, тогда вы правы - вы можете просто навести stunnel на один экземпляр."sslVersion = SSLv3": SSLv3 not supported
.TLSv1.2
вместо устаревшегоSSLv3
. Я отредактировал ответ, чтобы учесть устареваниеSSLv3
.Я бы рекомендовал использовать пакет django-sslserver .
Текущий пакет PyPI поддерживает только Django версии 1.5.5, но исправление было выполнено через 5d4664c . С этим исправлением система работает нормально и представляет собой довольно простое и понятное решение для тестирования https-соединений.
ОБНОВЛЕНИЕ: с тех пор, как я опубликовал свой ответ, приведенный выше коммит был объединен с основной веткой, а новый выпуск был помещен в PyPI. Таким образом, нет необходимости указывать фиксацию 5d4664c для этого конкретного исправления.
источник
Подобно django-sslserver, вы можете использовать RunServerPlus из django-extensions.
Он зависит от Werkzeug (так что вы получаете доступ к отличному отладчику Werkzeug) и pyOpenSSL (требуется только для режима ssl), поэтому для установки выполните:
Добавьте его в INSTALLED_APPS в файле settings.py вашего проекта:
Затем вы можете запустить сервер в режиме ssl с помощью:
Это создаст файл сертификата
/tmp/cert.crt
и файл ключа,/tmp/cert.key
который затем можно будет повторно использовать для будущих сеансов.В django-extensions есть множество дополнительных вещей, которые могут вам пригодиться, поэтому стоит быстро просмотреть документацию.
источник
./manage.py runserver_plus --cert /tmp/cert 0.0.0.0:8000
просто установите
включить sslserver в установленные aps
теперь ты можешь бежать
источник
Зарегистрируйтесь на https://ngrok.com/ . Вы можете использовать https для тестирования. Это может помочь людям, которые просто хотят быстро протестировать https.
источник
Для тех, кто ищет передовую версию опции stunnel для целей отладки:
stunnel.pem - это сертификат, созданный в соответствии с наиболее популярным ответом Эвана Гримма.
Слушайте все локальные интерфейсы на порту 443 и перенаправляйте на порт 80 на localhost
sudo необходимо только для входящих портов (-d [host:] port) ниже 1024
источник
Выполните следующую команду на терминале
Это запустит сеанс ngrok. В нем будут перечислены два URL-адреса. Один отображается на http: // localhost: 8000 . Второй отображается на https: // localhost: 8000 . Пожалуйста, проверьте скриншот ниже. Используйте любой URL. Он будет отображаться на вашем локальном сервере.
источник
allowed_host
Это можно сделать в одной строке с socat:
, где 8443 - порт для прослушивания входящих HTTPS-соединений, server.pem - самозаверяющий сертификат сервера, а localhost: 8000 - отладочный HTTP-сервер, запускаемый как обычно.
Подробнее: http://www.dest-unreach.org/socat/doc/socat-openssltunnel.html
источник
Обрабатывайте SSL / TLS с помощью прокси, такого как Nginx, а не Django. Nginx можно настроить для прослушивания порта 443, а затем перенаправления запросов на ваш сервер Django dev (обычно
http://127.0.0.1:8000
). Конфигурация Nginx для этого может выглядеть следующим образом:Вам также необходимо сопоставить
django-dev.localhost
с127.0.0.1
и добавитьdjango-dev.localhost
кALLOWED_HOSTS
вsettings.py
. В Linux вам нужно добавить следующую строку/etc/hosts
:После этого вы сможете получить доступ к своему сайту разработчика, перейдя
https://django-dev.localhost
в свой браузер (вам нужно будет обойти предупреждение системы безопасности вашего браузера).источник