在 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生成pdf文件的方法
Aug 04 Python
机器学习python实战之决策树
Nov 01 Python
Python内置函数delattr的具体用法
Nov 23 Python
python调用百度语音识别api
Aug 30 Python
解决python selenium3启动不了firefox的问题
Oct 13 Python
python redis 删除key脚本的实例
Feb 19 Python
使用Django简单编写一个XSS平台的方法步骤
Mar 25 Python
Python银行系统实战源码
Oct 25 Python
python队列原理及实现方法示例
Nov 27 Python
在python tkinter界面中添加按钮的实例
Mar 04 Python
python3.7.3版本和django2.2.3版本是否可以兼容
Sep 01 Python
python实现批量移动文件
Apr 05 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
Yii实现单用户博客系统文章详情页插入评论表单的方法
2015/12/28 PHP
详解PHP中的 input属性(隐藏 只读 限制)
2017/08/14 PHP
PHP的简单跳转提示的实现详解
2019/03/14 PHP
JavaScript 解析Json字符串的性能比较分析代码
2009/12/16 Javascript
JavaScript 异步方法队列链实现代码分析
2010/06/05 Javascript
from 表单提交返回值用post或者是get方法实现
2013/08/21 Javascript
js(jQuery)获取时间的方法及常用时间类搜集
2013/10/23 Javascript
YUI模块开发原理详解
2013/11/18 Javascript
jquery使用ajax实现微信自动回复插件
2014/04/28 Javascript
JavaScript利用正则表达式去除日期中的-
2014/06/09 Javascript
JQuery 两种方法解决刚创建的元素遍历不到的问题
2016/04/13 Javascript
AngularJS过滤器详解及示例代码
2016/08/16 Javascript
javascript 中关于array的常用方法详解
2017/05/05 Javascript
nodejs mysql 实现分页的方法
2017/06/06 NodeJs
js+html获取系统当前时间
2017/11/10 Javascript
实现div滚动条默认最底部以及默认最右边的示例代码
2017/11/15 Javascript
Vue实现带进度条的文件拖动上传功能
2018/02/23 Javascript
详解解决Vue相同路由参数不同不会刷新的问题
2018/10/12 Javascript
JS中的算法与数据结构之链表(Linked-list)实例详解
2019/08/20 Javascript
js仿京东放大镜效果
2020/08/09 Javascript
[01:16:37]【全国守擂赛】第三周决赛 Dark Knight vs. 一个弱队
2020/05/04 DOTA
python学习之第三方包安装方法(两种方法)
2015/07/30 Python
Python采用Django开发自己的博客系统
2020/09/29 Python
python去掉行尾的换行符方法
2017/01/04 Python
用 Python 爬了爬自己的微信朋友(实例讲解)
2017/08/25 Python
Python设计模式之命令模式简单示例
2018/01/10 Python
Keras预训练的ImageNet模型实现分类操作
2020/07/07 Python
基于HTML5+tracking.js实现刷脸支付功能
2020/04/16 HTML / CSS
cf战队收人广告词
2014/03/14 职场文书
实习协议书
2015/01/27 职场文书
幼儿园校车安全责任书
2015/05/08 职场文书
2015年团支部年度工作总结
2015/05/27 职场文书
寻找最美乡村教师观后感
2015/06/18 职场文书
小学见习报告
2015/06/23 职场文书
2015年音乐教学工作总结
2015/07/22 职场文书
2019旅游导游工作总结
2019/06/27 职场文书