在 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中关于Sequence切片的下标问题详解
Jun 15 Python
手把手教你python实现SVM算法
Dec 27 Python
Python操作Redis之设置key的过期时间实例代码
Jan 25 Python
使用Python爬取最好大学网大学排名
Feb 24 Python
Python将多个list合并为1个list的方法
Jun 27 Python
Python设计模式之迭代器模式原理与用法实例分析
Jan 10 Python
Python可视化mhd格式和raw格式的医学图像并保存的方法
Jan 24 Python
scrapy-redis的安装部署步骤讲解
Feb 27 Python
python采集百度搜索结果带有特定URL的链接代码实例
Aug 30 Python
pyinstaller打包程序exe踩过的坑
Nov 19 Python
用Python实现校园通知更新提醒功能
Nov 23 Python
matplotlib部件之矩形选区(RectangleSelector)的实现
Feb 01 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下目前为目最全的CURL中文说明
2010/08/01 PHP
浅析linux下apache服务器的配置和管理
2013/08/10 PHP
PHP中模糊查询并关联三个select框
2017/06/19 PHP
JQuery 常用方法和事件详细介绍
2013/04/18 Javascript
javascript获取下拉列表框当中的文本值示例代码
2013/07/31 Javascript
纯JS实现本地图片预览的方法
2015/07/31 Javascript
字符串反转_JavaScript
2016/04/28 Javascript
jquery实现全选功能效果的实现代码
2016/05/05 Javascript
BootStrap Typeahead自动补全插件实例代码
2016/08/10 Javascript
Angular2 Service实现简单音乐播放器服务
2017/02/24 Javascript
AngulaJS路由 ui-router 传参实例
2017/04/28 Javascript
php main 与 iframe 相互通讯类(js+php同域/跨域)
2017/09/14 Javascript
LayUI数据接口返回实体封装的例子
2019/09/12 Javascript
Vue 解决路由过渡动画抖动问题(实例详解)
2020/01/05 Javascript
jquery实现图片无缝滚动 蒙版遮蔽效果
2020/01/11 jQuery
linux 下以二进制的方式安装 nodejs
2020/02/12 NodeJs
[04:03]DOTA2肉山黑名单梦之声 风暴之灵中文配音鉴赏
2013/07/03 DOTA
Python深入学习之闭包
2014/08/31 Python
tensorflow saver 保存和恢复指定 tensor的实例讲解
2018/07/26 Python
Windows下python3.6.4安装教程
2018/07/31 Python
PYQT5设置textEdit自动滚屏的方法
2019/06/14 Python
瑞典快乐袜子:Happy Socks
2018/02/16 全球购物
Belstaff英国官方在线商店:Belstaff.co.uk
2021/02/09 全球购物
高级Java程序员面试题
2016/06/23 面试题
儿科护士自我鉴定
2013/10/14 职场文书
金融专业应届生求职信
2013/11/02 职场文书
出纳岗位职责范本
2013/12/01 职场文书
办公室文书岗位职责
2013/12/16 职场文书
股指期货心得体会
2014/09/13 职场文书
六年级学生评语大全
2014/12/26 职场文书
西安大雁塔导游词
2015/02/10 职场文书
2015年全国爱耳日活动总结
2015/02/27 职场文书
2015年服务员工作总结
2015/04/08 职场文书
Vue的生命周期一起来看看
2022/02/24 Vue.js
Python多线程实用方法以及共享变量资源竞争问题
2022/04/12 Python
详解NumPy中的线性关系与数据修剪压缩
2022/05/25 Python