在 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机器学习之决策树分类详解
Dec 20 Python
Python3爬虫教程之利用Python实现发送天气预报邮件
Dec 16 Python
python读取txt文件并取其某一列数据的示例
Feb 19 Python
如何用Python来搭建一个简单的推荐系统
Aug 07 Python
详解Python3定时器任务代码
Sep 23 Python
Django1.11自带分页器paginator的使用方法
Oct 31 Python
Python反爬虫伪装浏览器进行爬虫
Feb 28 Python
python 的topk算法实例
Apr 02 Python
Python中的全局变量如何理解
Jun 04 Python
python 使用openpyxl读取excel数据
Feb 18 Python
详解使用scrapy进行模拟登陆三种方式
Feb 21 Python
Pytorch自定义Dataset和DataLoader去除不存在和空数据的操作
Mar 03 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内核探索之变量
2015/12/22 PHP
JavaScript学习笔记(十七)js 优化
2010/02/04 Javascript
JavaScript中的面向对象介绍
2012/06/30 Javascript
javascript在子页面中函数无法调试问题解决方法
2014/01/17 Javascript
jQuery实现的在线答题功能
2015/04/12 Javascript
iframe中子父类窗口调用JS的方法及注意事项
2015/08/25 Javascript
javascript原型继承工作原理和实例详解
2016/04/07 Javascript
JS中substring与substr的用法
2016/11/16 Javascript
Vue.js系列之项目搭建(1)
2017/01/03 Javascript
JQuery Dialog对话框 不能通过Esc关闭的原因分析及解决办法
2017/01/18 Javascript
JavaScript实现时钟滴答声效果
2017/01/29 Javascript
js中作用域的实例解析
2017/03/16 Javascript
bootstrap的常用组件和栅格式布局详解
2017/05/02 Javascript
用最简单的方法判断JavaScript中this的指向(推荐)
2017/09/04 Javascript
angular4自定义组件详解
2017/09/28 Javascript
vue左右侧联动滚动的实现代码
2018/06/06 Javascript
跟老齐学Python之list和str比较
2014/09/20 Python
Python实现的Google IP 可用性检测脚本
2015/04/23 Python
python matplotlib 在指定的两个点之间连线方法
2018/05/25 Python
pycharm内无法import已安装的模块问题解决
2020/02/12 Python
Python多线程获取返回值代码实例
2020/02/17 Python
python 使用递归实现打印一个数字的每一位示例
2020/02/27 Python
Python中格式化字符串的四种实现
2020/05/26 Python
中国酒类在线零售网站:酒仙网
2016/08/20 全球购物
土耳其风格手工珠宝:Ottoman Hands
2019/07/26 全球购物
餐饮业的创业计划书范文
2013/12/26 职场文书
学术会议邀请函范文
2014/01/22 职场文书
小学清明节活动方案
2014/03/08 职场文书
大学生就业策划书范文
2014/04/04 职场文书
工业设计毕业生自荐信
2014/04/13 职场文书
小学三好学生事迹材料
2014/08/15 职场文书
创先争优活动心得体会
2014/09/04 职场文书
公司的门卫岗位职责
2014/09/09 职场文书
行政答辩状范文
2015/05/21 职场文书
员工规章制度范本
2015/08/07 职场文书
Win10开机修复磁盘错误怎么跳过?Win10关闭开机磁盘检查的方法
2022/09/23 数码科技