在 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基础教程之lambda表达式使用方法
Feb 12 Python
python列表操作实例
Jan 14 Python
小米5s微信跳一跳小程序python源码
Jan 08 Python
基于DataFrame筛选数据与loc的用法详解
May 18 Python
tensorflow: variable的值与variable.read_value()的值区别详解
Jul 30 Python
Django 限制用户访问频率的中间件的实现
Aug 23 Python
Python在OpenCV里实现极坐标变换功能
Sep 02 Python
Python使用qrcode二维码库生成二维码方法详解
Feb 17 Python
.img/.hdr格式转.nii格式的操作
Jul 01 Python
Python 使用生成器代替线程的方法
Aug 04 Python
用python自动生成日历
Apr 24 Python
python+pyhyper实现识别图片中的车牌号思路详解
Dec 24 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
可快速识别放射性物质-国外大神教你diy一个开放式辐射探测器
2020/03/12 无线电
php操作mysqli(示例代码)
2013/10/28 PHP
3个PHP多维数组转为一维数组的方法实例
2014/03/13 PHP
php针对cookie操作的队列操作类实例
2014/12/10 PHP
php中判断数组相等的方法以及数组运算符介绍
2015/03/30 PHP
微信小程序 消息推送php服务器验证实例详解
2017/03/30 PHP
js计算字符串长度包含的中文是utf8格式
2013/10/15 Javascript
浅析JavaScript中的CSS属性及命名规范
2013/11/28 Javascript
jQuery动画特效实例教程
2014/08/29 Javascript
javascript常用的方法分享
2015/07/01 Javascript
完美解决jQuery符号$与其他javascript 库、框架冲突的问题
2016/08/09 Javascript
javascript 秒表计时器实现代码
2017/03/09 Javascript
浅析JavaScript中的平稳退化(graceful degradation)
2017/07/24 Javascript
jquery在vue脚手架中的使用方式示例
2017/08/29 jQuery
zTree树形菜单交互选项卡效果的实现方法
2017/12/25 Javascript
小程序实现多列选择器
2019/02/15 Javascript
简单了解node npm cnpm的具体使用方法
2019/02/27 Javascript
深入了解JavaScript 防抖和节流
2019/09/12 Javascript
[40:29]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第一场
2018/04/10 DOTA
python字典多条件排序方法实例
2014/06/30 Python
Python爬虫实现网页信息抓取功能示例【URL与正则模块】
2017/05/18 Python
Python饼状图的绘制实例
2019/01/15 Python
pybind11在Windows下的使用教程
2019/07/04 Python
python matplotlib工具栏源码探析二之添加、删除内置工具项的案例
2021/02/25 Python
使用phonegap创建联系人的实现方法
2017/03/30 HTML / CSS
Belle Maison倍美丛官网:日本千趣会旗下邮购网站
2016/07/22 全球购物
手机配件第一品牌:ZAGG
2017/05/28 全球购物
TripAdvisor越南:全球领先的旅游网站
2017/09/21 全球购物
一套PHP的笔试题
2013/05/31 面试题
药学专业个人自我评价
2013/11/11 职场文书
广告设计专业自荐信范文
2013/11/14 职场文书
资源环境与城市管理专业推荐信
2013/11/30 职场文书
广播体操比赛口号
2014/06/10 职场文书
展览会邀请函
2015/02/02 职场文书
创业者如何撰写出一份打动投资人的商业计划书?
2019/07/02 职场文书
go语言基础 seek光标位置os包的使用
2021/05/09 Golang