在 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使用rsa加密算法模块模拟新浪微博登录
Jan 22 Python
用Python实现一个简单的能够发送带附件的邮件程序的教程
Apr 08 Python
python妙用之编码的转换详解
Apr 21 Python
浅谈Python中重载isinstance继承关系的问题
May 04 Python
python获取命令行输入参数列表的实例代码
Jun 23 Python
python利用百度AI实现文字识别功能
Nov 27 Python
Python利用pandas处理Excel数据的应用详解
Jun 18 Python
基于python3监控服务器状态进行邮件报警
Oct 19 Python
浅谈keras.callbacks设置模型保存策略
Jun 18 Python
python接入支付宝的实例操作
Jul 20 Python
Pycharm连接gitlab实现过程图解
Sep 01 Python
Django用户认证系统如何实现自定义
Nov 12 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
ftp类(example.php)
2006/10/09 PHP
php 时间计算问题小结
2009/01/04 PHP
php Xdebug 调试扩展的安装与使用.
2010/03/13 PHP
thinkphp3.2嵌入百度编辑器ueditor的实例代码
2017/07/13 PHP
发布一个高效的JavaScript分析、压缩工具 JavaScript Analyser
2007/11/30 Javascript
jQuery 学习6 操纵元素显示效果的函数
2010/02/07 Javascript
基于jquery的一个图片hover的插件
2010/04/24 Javascript
JavaScript小技巧 2.5 则
2010/09/12 Javascript
jQuery避免$符和其他JS库冲突的方法对比
2014/02/20 Javascript
jquery插件qrcode在线生成二维码
2015/04/26 Javascript
Javascript实现商品秒杀倒计时(时间与服务器时间同步)
2015/09/16 Javascript
详解Javascript函数声明与递归调用
2016/10/22 Javascript
NodeJS实现客户端js加密
2017/01/09 NodeJs
详解微信小程序开发之——wx.showToast(OBJECT)的使用
2017/01/18 Javascript
Flask中获取小程序Request数据的两种方法
2017/05/12 Javascript
深入理解Vue 的条件渲染和列表渲染
2017/09/01 Javascript
基于vue v-for 循环复选框-默认勾选第一个的实现方法
2018/03/03 Javascript
小程序跳转到的H5页面再跳转回跳小程序的方法
2020/03/06 Javascript
修改Vue打包后的默认文件名操作
2020/08/12 Javascript
微信小程序基于高德地图API实现天气组件(动态效果)
2020/10/22 Javascript
详解JavaScript中的this指向问题
2021/02/05 Javascript
python3编写C/S网络程序实例教程
2014/08/25 Python
python使用Berkeley DB数据库实例
2014/09/26 Python
使用Python中的cookielib模拟登录网站
2015/04/09 Python
Python模拟登录验证码(代码简单)
2016/02/06 Python
Windows上使用Python增加或删除权限的方法
2018/04/24 Python
Python+OpenCV图片局部区域像素值处理详解
2019/01/23 Python
python3.6+django2.0+mysql搭建网站过程详解
2019/07/24 Python
基于python实现图片转字符画代码实例
2020/09/04 Python
详解CSS透明opacity和IE各版本透明度滤镜filter的最准确用法
2016/12/20 HTML / CSS
Html5 语法与规则简要概述
2014/07/29 HTML / CSS
Prototype是怎么扩展DOM的
2014/10/01 面试题
学校欢迎标语
2014/06/18 职场文书
教师四风问题对照检查材料
2014/09/26 职场文书
员工升职自荐信
2015/03/27 职场文书
2015年安全保卫工作总结
2015/05/14 职场文书