当前位置: 首页 > 面试题库 >

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

曹建明
2023-03-14
问题内容

我有一个使用“安全” cookie的应用程序,并且想要测试其功能而无需设置复杂的启用SSL的开发服务器。有什么方法可以像我可以使用来测试未加密的请求那样简单./manage.py runserver吗?


问题答案:

它不像内置的开发服务器那么简单,但是使用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

让我们逐行将其分解:

  • 第1行:启动stunnel,并将其指向我们刚刚创建的配置文件。该通道在端口8443上有通道监听,将收到的所有连接封装为SSL,然后将其传递到端口8001
  • 第2行:启动普通的Django Runserver实例(在端口8000上)
  • 第3行:启动另一个Django Runserver实例(在端口8001上),并将其配置为将所有传入连接都视为使用HTTPS执行。
    使用以下命令使我们刚刚创建的runscript文件可执行:
chmod a+x runserver

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

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



 类似资料:
  • 问题内容: 我正在尝试验证目标是否公开了https Web服务。我有通过HTTP连接的代码,但不确定如何通过HTTPS连接。我已经阅读过您使用SSL,但我也阅读过它不支持证书错误。我得到的代码来自python docs: 有谁知道如何连接到HTTPS? 我已经尝试过HTTPSConenction,但是它以错误代码响应,声称httplib没有属性HTTPSConnection。我也没有socket.

  • 问题内容: 我正在做一个https帖子,但是却得到ssl异常的一个例外,不受信任的服务器证书。如果我做正常的HTTP,它工作正常。我是否必须以某种方式接受服务器证书? 问题答案: 我正在猜测,但是如果你想进行实际的握手,则必须让android知道你的证书。如果你只想接受任何内容,请使用以下伪代码通过Apache HTTP Client获得所需的内容: CustomSSLSocketFactory:

  • 我在Java中与SSL连接有问题。 我使用java 1.7.80和S. O.: ubuntu 14.04 我的问题是证书,甚至证书。我有四个必须使用pkcs12格式连接的元素。 -- -- -- -- 1) 步骤-将文件cer转换为文件pem 2)步骤-创建链证书的联合pem文件 3)步骤-创建p12文件 好啊我的第一个测试是在浏览器(Mozilla Firefox)中导入p12文件以验证操作。导

  • 问题内容: 我有2个应用程序,一个是Servlet / Tomcat服务器,另一个是Android应用程序。 我想使用HttpURLConnection在两者之间发送和接收XML。 码: 现在,我需要使用SSL来发送XML以确保安全。 首先,我使用Java Keytool生成.keystore文件。 然后我将XML代码放在Tomcat的server.xml文件中以使用SSL 然后,将其更改为Htt

  • 问题内容: 我正在设置信用卡处理程序,需要对CURL使用替代方法。当我使用测试服务器(未调用SSL URL)时,以下代码运行良好,但是现在当我在使用HTTPS的工作服务器上对其进行测试时,它失败,并显示错误消息“无法打开流”。 问题答案: 请尝试以下脚本,以查看您的php脚本是否有https包装器。 输出应该是这样的

  • 问题内容: 我这里有代码,可让我连接到https服务器并传输数据。它工作正常,但是我想知道我是否以正确的方式进行操作,并且实际上是在建立安全连接。请检查我的工作。谢谢。 我像这样使用此代码: 然后,我从那里阅读响应。再次感谢。 问题答案: 查看Apache HttpClient 的官方Custom SSL上下文教程。 正如Stephen C所提到的,您不需要为https上下文注册端口80。将其注册