在 Django/Flask 开发服务器上使用 HTTPS


Posted in Python onJuly 03, 2014

使用 Django 或 Flask 这种框架开发 web app 的时候一般都会用内建服务器开发和调试程序,等程序完成后再移交到生产环境部署。问题是这些内建服务器通常都不支持 HTTPS,我们想在开发的时候就能够使用和测试 HTTPS,不想还没测试就部署到生产环境,所以我们需要内建服务器能支持 HTTPS.

这个问题可以通过一个外部程序 stunnel 来解决,stunnel 的作用是通过 OpenSSL 库对 TCP 会话进行加密,建立起一个安全通道,保护没有加密功能或未加密的程序。其主要功能有两个:

接收未加密的数据流,进行 SSL 加密,然后把加密后的数据流通过网络发送出去;
对已加密的数据流进行解密,并将解密后的数据流其通过网络发送给另一个程序。
了解了 stunnel 的功能后我们很容易就能想到利用 stunnel 建立一个 SSL 加密通道绑定到 Django/Flask 内建服务器上,stunnel 启动 443 端口接受用户的 HTTPS 请求,解密后发送给内建服务器的 8000 端口处理,内建服务器处理完后发送数据给 stunnel 然后加密后返回给浏览器用户。

好吧,上面说了一堆貌似很复杂,其实使用 stunnel 很简单。

在 Django/Flask 开发服务器所在的服务器上安装 stunnel:

# yum install stunnel(在 CentOS 上)

或者

$ sudo apt-get install stunnel4(在 Ubuntu 上)

如果没有购买 SSL 证书的话自己生成一个,对了,这个文件的权限必须是 600 哦:

# openssl req -new -x509 -days 365 -nodes -out vpsee.pem -keyout vpsee.pem

# chmod 600 vpsee.pem

新建一个配置文件叫做 https,然后用 stunnel 执行这个配置文件,启动 443 端口连接到 Django/Flask 内建服务器的 8000 端口:

# vi https
pid =
cert = vpsee.pem
debug = 7
foreground = yes

[https]
accept = 443
connect = 8000

# stunnel https

启动 Django 内建服务器绑定到上面配置文件提到的 8000 端口:

# HTTPS=1 python manage.py runserver 0.0.0.0:8000
启动 Flask 内建服务器不需要特别的,改变端口到 8000,按照正常的方式启动就可以了:

# vi run.py
#!flask/bin/python
from app import app
app.run(host='0.0.0.0', port=8000, debug = True)

# ./run.py
 * Running on http://0.0.0.0:8000/
 * Restarting with reloader
Python 相关文章推荐
回调函数的意义以及python实现实例
Jun 20 Python
详解Python使用tensorflow入门指南
Feb 09 Python
python如何读写csv数据
Mar 21 Python
python下解压缩zip文件并删除文件的实例
Apr 24 Python
Python matplotlib 画图窗口显示到gui或者控制台的实例
May 24 Python
python-str,list,set间的转换实例
Jun 27 Python
Flask之flask-script模块使用
Jul 26 Python
python 发送和接收ActiveMQ消息的实例
Jan 30 Python
Python获取数据库数据并保存在excel表格中的方法
Jun 12 Python
通过PYTHON来实现图像分割详解
Jun 26 Python
pandas数据处理之绘图的实现
Jun 15 Python
python中的被动信息搜集
Apr 29 Python
采用python实现简单QQ单用户机器人的方法
Jul 03 #Python
centos系统升级python 2.7.3
Jul 03 #Python
python实现定制交互式命令行的方法
Jul 03 #Python
小结Python用fork来创建子进程注意事项
Jul 03 #Python
在Windows8上的搭建Python和Django环境
Jul 03 #Python
Win7上搭建Cocos2d-x 3.1.1开发环境
Jul 03 #Python
盘点提高 Python 代码效率的方法
Jul 03 #Python
You might like
Apache设置虚拟WEB
2006/10/09 PHP
PHP 操作文件的一些FAQ总结
2009/02/12 PHP
php生成gif动画的方法
2015/11/05 PHP
PHP8.0新功能之Match表达式的使用
2020/07/19 PHP
神奇的代码 通杀各种网站-可随意修改复制页面内容
2008/07/17 Javascript
javascript 可以拖动的DIV(二)
2009/06/26 Javascript
Javascript中判断变量是数组还是对象(array还是object)
2013/08/14 Javascript
JS关键字球状旋转效果的实例代码
2013/11/29 Javascript
jq实现酷炫的鼠标经过图片翻滚效果
2014/03/12 Javascript
JavaScript实现的SHA-1加密算法完整实例
2016/02/02 Javascript
JavaScript中数组slice和splice的对比小结
2016/09/22 Javascript
微信小程序 教程之模板
2016/10/18 Javascript
JavaScript实现二分查找实例代码
2017/02/22 Javascript
jquery实现简单实用的轮播器
2017/05/23 jQuery
js代码规范之Eslint安装与配置详解
2018/09/08 Javascript
javascript中toFixed()四舍五入使用方法详解
2018/09/28 Javascript
微信小程序基于canvas渐变实现的彩虹效果示例
2019/05/03 Javascript
javascript实现的字符串转换成数组操作示例
2019/06/13 Javascript
BootStrap表单验证中的非Submit类型按钮点击时触发验证的坑
2019/09/05 Javascript
使用xampp将angular项目运行在web服务器的教程
2019/09/16 Javascript
Vue学习之axios的使用方法实例分析
2020/01/06 Javascript
jquery传参及获取方式(两种方式)
2020/02/13 jQuery
Vue中fragment.js使用方法小结
2020/02/17 Javascript
解决vue-pdf查看pdf文件及打印乱码的问题
2020/11/04 Javascript
详解Python字符串对象的实现
2015/12/24 Python
Scrapy框架爬取西刺代理网免费高匿代理的实现代码
2019/02/22 Python
Django日志及中间件模块应用案例
2020/09/10 Python
英国Zoro工具:手动工具,电动工具和个人防护用品
2016/11/02 全球购物
Farnell德国:电子元器件供应商
2018/07/10 全球购物
质检部部长职责
2013/12/16 职场文书
如何写你的创业计划书
2014/01/07 职场文书
班组长竞聘书
2014/03/31 职场文书
公司党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
党员学习群众路线心得体会
2014/11/04 职场文书
惹女朋友生气检讨书
2015/05/06 职场文书
vue中div禁止点击事件的实现
2022/04/02 Vue.js