在 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编写android截屏脚本双击运行即可
Jul 21 Python
python中的装饰器详解
Apr 13 Python
实例解析Python设计模式编程之桥接模式的运用
Mar 02 Python
利用python生成一个导出数据库的bat脚本文件的方法
Dec 30 Python
Python入门_浅谈逻辑判断与运算符
May 16 Python
python使用sqlite3时游标使用方法
Mar 13 Python
对Python中内置异常层次结构详解
Oct 18 Python
Python编写合并字典并实现敏感目录的小脚本
Feb 26 Python
Django Rest framework认证组件详细用法
Jul 25 Python
python 如何将数据写入本地txt文本文件的实现方法
Sep 11 Python
python3通过qq邮箱发送邮件以及附件
May 20 Python
python 图像判断,清晰度(明暗),彩色与黑白实例
Jun 04 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
php比较多维数组中值的大小排序实现代码
2012/09/08 PHP
深入php socket的讲解与实例分析
2013/06/13 PHP
ThinkPHP实现批量删除数据的代码实例
2014/07/02 PHP
PHP函数引用返回的实例详解
2016/09/11 PHP
php微信开发之关键词回复功能
2018/06/13 PHP
JS之小练习代码
2008/10/12 Javascript
基于jQuery的日期选择控件
2009/10/27 Javascript
Cookie 小记
2010/04/01 Javascript
jQuery EasyUI API 中文文档 - DataGrid数据表格
2011/11/17 Javascript
JSON 数字排序多字段排序介绍
2013/09/18 Javascript
JavaScript判断是否为数组的3种方法及效率比较
2015/04/01 Javascript
JavaScript获得页面base标签中url的方法
2015/04/03 Javascript
利用JavaScript的AngularJS库制作电子名片的方法
2015/06/18 Javascript
js实现仿百度风云榜可重复多次调用的TAB切换选项卡效果
2015/08/31 Javascript
js实现拖拽效果(构造函数)
2015/12/14 Javascript
jQuery使用正则表达式限制文本框只能输入数字
2016/06/18 Javascript
Augularjs-起步详解
2016/07/08 Javascript
node+express+ejs使用模版引擎做的一个示例demo
2017/09/18 Javascript
Bootstrap 树控件使用经验分享(图文解说)
2017/11/06 Javascript
NodeJS搭建HTTP服务器的实现步骤
2018/10/12 NodeJs
angularjs通过过滤器返回超链接的方法
2018/10/26 Javascript
vue源码nextTick使用及原理解析
2019/08/13 Javascript
python 提取key 为中文的json 串方法
2018/12/31 Python
python机器学习库xgboost的使用
2020/01/20 Python
vscode调试django项目的方法
2020/08/06 Python
Python如何解除一个装饰器
2020/08/07 Python
带有css3动画效果的兼容多浏览器简单导航条示例
2014/01/26 HTML / CSS
CSS3中animation实现流光按钮效果
2020/12/21 HTML / CSS
HTML5 Canvas 起步(2) - 路径
2009/05/12 HTML / CSS
财务信息服务专业自荐书范文
2014/02/08 职场文书
财务部总监岗位职责
2014/03/12 职场文书
投资意向书范本
2014/04/01 职场文书
领导干部遵守党的政治纪律情况思想汇报
2014/09/14 职场文书
2014党员学习兰辉先进事迹思想汇报
2014/09/17 职场文书
中国文明网向国旗敬礼活动精彩寄语2014
2014/09/27 职场文书
投诉书格式范本
2015/07/02 职场文书