您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何使用``runserver''与非https连接一样轻松地测试与Django的https连接?

如何使用``runserver''与非https连接一样轻松地测试与Django的https连接?

它不像内置的开发服务器那么简单,但是使用stunnel作为浏览器和开发服务器之间的SSLifying中间人来达成某种目标并非难事。使用Stunnel,你可以在计算机上设置轻量级服务器,该服务器可以在配置的端口上接受连接,并使用SSL包装它们,然后将其传递给其他服务器。我们将使用它打开一个stunnel端口(8443),并将接收到的所有流量传递给Django runserver实例。

首先,你需要一个stunnel,可以在这里下载,也可以由平台的打包系统提供(例如:)apt-get install stunnel。我将使用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项目目录(其中包含manage.py的目录):

cd ..

在这里,我们将创建一个名为runserver的脚本,它将运行stunnel和两台django开发服务器(一台用于正常连接,一台用于SSL连接):

stunnel4 stunnel/dev_https &
python manage.py runserver&
HTTPS=1 python manage.py runserver 8001

让我们逐行将其分解:

chmod a+x runserver

现在,当你要运行开发服务器时,只需./runserver从项目目录执行即可。要进行尝试,只需将浏览器指向http:// localhost:8000(用于正常的HTTP流量)和https:// localhost:8443(用于HTTPS流量)即可。请注意,你使用的浏览器几乎肯定会抱怨所使用的证书,并要求你添加例外或以其他方式明确指示浏览器继续浏览。这是因为你创建了自己的证书,并且浏览器不信任该证书来告知真实身份。这对开发来说很好,但是显然不会削减它的生产量。

不幸的是,在我的机器上,当我按Ctrl-C时,该runserver脚本无法很好地退出。我必须手动终止进程-有人建议解决该问题吗?

Go 2022/1/1 18:19:38 有486人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶