在 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简单操作sqlite3的方法示例
Mar 22 Python
Python中的 enum 模块源码详析
Jan 09 Python
PyCharm 设置SciView工具窗口的方法
Jan 15 Python
Python第三方库h5py_读取mat文件并显示值的方法
Feb 08 Python
强悍的Python读取大文件的解决方案
Feb 16 Python
详解centos7+django+python3+mysql+阿里云部署项目全流程
Nov 15 Python
Django restframework 框架认证、权限、限流用法示例
Dec 21 Python
Python使用uuid库生成唯一标识ID
Feb 12 Python
Python 获取异常(Exception)信息的几种方法
Dec 29 Python
浅谈pytorch中的dropout的概率p
May 27 Python
Python爬取英雄联盟MSI直播间弹幕并生成词云图
Jun 01 Python
Python3 类型标注支持操作
Jun 02 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中Session的概念
2006/10/09 PHP
Linux下ZendOptimizer的安装与配置方法
2007/04/12 PHP
Joomla下利用configuration.php存储简单数据
2010/05/19 PHP
Zend Framework教程之Loader以及PluginLoader用法详解
2016/03/09 PHP
yii2控制器Controller Ajax操作示例
2016/07/23 PHP
php 微信开发获取用户信息如何实现
2016/12/13 PHP
PHP生成各种随机验证码的方法总结【附demo源码】
2017/06/05 PHP
PHP PDO数据库操作预处理与注意事项
2019/03/16 PHP
Laravel如何创建服务器提供者实例代码
2019/04/15 PHP
JavaScript入门教程(10) 认识其他对象
2009/01/31 Javascript
javascript 获取所有id中包含某关键字的控件的实现代码
2010/11/25 Javascript
13 个JavaScript 性能提升技巧分享
2012/07/26 Javascript
浅谈重写window对象的方法
2014/12/29 Javascript
js使用心得分享
2015/01/13 Javascript
Javascript实现飞动广告效果的方法
2015/05/25 Javascript
jQuery在线选座位插件seat-charts特效代码分享
2015/08/27 Javascript
分享Javascript实用方法二
2015/12/13 Javascript
深入理解Angularjs向指令传递数据双向绑定机制
2016/12/31 Javascript
jQuery实现一个简单的轮播图
2017/02/19 Javascript
js实现简易聊天对话框
2017/08/17 Javascript
解决jquery validate 验证不通过后验证正确的信息仍残留在label上的方法
2019/08/27 jQuery
Vue 实现CLI 3.0 + momentjs + lodash打包时优化
2019/11/13 Javascript
JavaScript实现电灯开关小案例
2020/03/30 Javascript
Handtrack.js库实现实时监测手部运动(推荐)
2021/02/08 Javascript
[11:57]《一刀刀一天》第十七期:TI中国军团加油!
2014/05/26 DOTA
Python中matplotlib中文乱码解决办法
2017/05/12 Python
python实现超市商品销售管理系统
2019/11/22 Python
Myprotein比利时官方网站:欧洲第一运动营养品牌
2020/10/04 全球购物
大学生个人自我鉴定
2013/12/03 职场文书
工商管理实习生自我鉴定范文
2013/12/18 职场文书
常务副总经理任命书
2014/06/05 职场文书
向国旗敬礼活动小结
2014/09/27 职场文书
暖春观后感
2015/06/08 职场文书
MySQL示例讲解数据库约束以及表的设计
2022/06/16 MySQL
JavaScript架构localStorage特殊场景下二次封装操作
2022/06/21 Javascript
SpringCloud中分析讲解Feign组件添加请求头有哪些坑梳理
2022/06/21 Java/Android