如何使用’runserver’测试与Django的https连接和使用非https连接一样简单?

我有一个应用程序使用“安全”的Cookie,并希望测试它的功能,而无需设置复杂的启用SSL的开发服务器。有没有办法做到这一点,只是因为我可以使用./manage.py runserver测试非加密的请求?
它不像内置的开发服务器那么简单,但是使用stunnel作为浏览器和开发服务器之间的SSL化中间人不太难。 Stunnel允许您在机器上设置一个轻量级服务器,它在配置的端口上接受连接,用SSL包装它们,并将它们传递到其他服务器。我们将使用它来打开一个stunnel端口(8443),并将其接收到的任何流量传递给Django runserver实例。

首先,你需要stunnel可以是downloaded here或可能由您的平台的软件包系统提供(例如:apt-get install stunnel)。我将使用stunnel的版本4(例如:Ubuntu上的/ usr / bin / stunnel4),版本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

让我们逐行分解一下:

> Line 1:启动stunnel并将其指向我们刚刚创建的配置文件。这有stunnel侦听在端口8443,包装在SSL接收的任何连接,并且把它们传送到端口8001
>第2行:启动正常的Django runserver实例(在端口8000上)
>第3行:启动另一个Django runserver实例(在端口8001上),并将其配置为将所有传入连接视为使用HTTPS执行。

使我们刚刚创建的runscript文件可执行:

chmod a+x runserver

现在当你想运行你的开发服务器只是从你的项目目录执行./runserver。要尝试一下,只需将浏览器指向正常HTTP流量的http://localhost:8000,以及HTTPS流量的https://localhost:8443。请注意,您是浏览器几乎肯定会抱怨使用的证书,并要求您添加例外或明确指示浏览器继续浏览。这是因为您创建了自己的证书,它不被浏览器信任告诉他是谁的真相。这对开发是好的,但显然不会减少生产。

不幸的是,在我的机器上,这个runserver脚本不会很好地退出,当我打Ctrl-C。我必须手动杀死进程 – 任何人都有建议,以解决这个问题?

感谢Michael Gile的post和django-weave的wiki entry作为参考材料。

http://stackoverflow.com/questions/8023126/how-can-i-test-https-connections-with-django-as-easily-as-i-can-non-https-connec

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:如何使用’runserver’测试与Django的https连接和使用非https连接一样简单?