在 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使用marshal模块序列化实例
Sep 25 Python
10种检测Python程序运行时间、CPU和内存占用的方法
Apr 01 Python
python使用MySQLdb访问mysql数据库的方法
Aug 03 Python
python脚本实现xls(xlsx)转成csv
Apr 10 Python
Python读写txt文本文件的操作方法全解析
Jun 26 Python
Python基于Flask框架配置依赖包信息的项目迁移部署
Mar 02 Python
在python2.7中用numpy.reshape 对图像进行切割的方法
Dec 05 Python
基于pandas中expand的作用详解
Dec 17 Python
python实现简单坦克大战
Mar 27 Python
安装并免费使用Pycharm专业版(学生/教师)
Sep 24 Python
Python基础之数据结构详解
Apr 28 Python
Python基础之元编程知识总结
May 23 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 base64+gzinflate压缩编码和解码代码
2008/10/03 PHP
PHP stristr() 函数(不区分大小写的字符串查找)
2010/06/03 PHP
php过滤敏感词的示例
2014/03/31 PHP
JS 中document.URL 和 windows.location.href 的区别
2009/11/11 Javascript
使用javascript获取flash加载的百分比的实现代码
2011/05/25 Javascript
javascript之Partial Application学习
2013/01/10 Javascript
JavaScript中的值类型详细介绍
2014/12/29 Javascript
input输入框鼠标焦点提示信息
2015/03/17 Javascript
JQuery显示隐藏页面元素的方法总结
2015/04/16 Javascript
第二次聊一聊JS require.js模块化工具的基础知识
2016/04/17 Javascript
Angular.js 实现数字转换汉字实例代码
2016/07/14 Javascript
Jquery组件easyUi实现选项卡切换示例
2016/08/23 Javascript
微信开发 JS-SDK 6.0.2 经常遇到问题总结
2016/12/08 Javascript
微信小程序 刷新上拉下拉不会断详细介绍
2017/05/11 Javascript
pace.js和NProgress.js两个加载进度插件的一点小总结
2018/01/31 Javascript
Vue组件通信的四种方式汇总
2018/02/08 Javascript
解决vue 绑定对象内点击事件失效问题
2018/09/05 Javascript
Vue刷新修改页面中数据的方法
2018/09/16 Javascript
vue-cli3 karma单元测试的实现
2019/01/18 Javascript
JavaScript强制类型转换和隐式类型转换操作示例
2019/05/01 Javascript
ES6中的迭代器、Generator函数及Generator函数的异步操作方法
2019/05/12 Javascript
小程序封装路由文件和路由方法(5种全解析)
2019/05/26 Javascript
Echarts地图添加引导线效果(labelLine)
2019/09/30 Javascript
Vue 请求传公共参数的操作
2020/07/31 Javascript
使用pyqt5 tablewidget 单元格设置正则表达式
2019/12/13 Python
tensorflow指定CPU与GPU运算的方法实现
2020/04/21 Python
如何用JQuery进行表单验证
2013/05/29 面试题
新任教师自我鉴定
2014/02/24 职场文书
高中生学期学习自我评价
2014/02/24 职场文书
学习雷锋精神心得体会范文
2014/03/12 职场文书
解除劳动合同证明书模板
2014/11/20 职场文书
2015小学毕业班工作总结
2015/07/21 职场文书
2016幼儿园教师年度考核评语
2015/12/01 职场文书
导游词之台湾安平古堡
2019/12/25 职场文书
教你用Java在个人电脑上实现微信扫码支付
2021/06/13 Java/Android
【海涛dota解说】一房久违的影魔魂守二连发
2022/04/01 DOTA