在 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实现抓取百度搜索结果页的网站标题信息
Jan 22 Python
Python使用metaclass实现Singleton模式的方法
May 05 Python
python图像处理之镜像实现方法
May 30 Python
bat和python批量重命名文件的实现代码
May 19 Python
python2.7的编码问题与解决方法
Oct 04 Python
对pandas数据判断是否为NaN值的方法详解
Nov 06 Python
Django 过滤器汇总及自定义过滤器使用详解
Jul 19 Python
Django自定义模板过滤器和标签的实现方法
Aug 21 Python
python命令 -u参数用法解析
Oct 24 Python
基于python实现检索标记敏感词并输出
May 07 Python
如何使用scrapy中的ItemLoader提取数据
Sep 30 Python
python pymysql库的常用操作
Oct 16 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_encode、urlencode、sha1]
2012/01/16 PHP
destoon安全设置中需要设置可写权限的目录及文件
2014/06/21 PHP
php解析mht文件转换成html的实例
2017/03/13 PHP
PHP7.3.10编译安装教程
2019/10/08 PHP
基于jQuery的左右滚动实现代码
2010/12/03 Javascript
jquery fancybox ie6不显示关闭按钮的解决办法
2013/12/25 Javascript
JQuery判断HTML元素是否存在的两种解决方法
2013/12/26 Javascript
采用call方式实现js继承
2014/05/20 Javascript
选择复选框按钮置灰否则按钮可用
2014/05/22 Javascript
JavaScript闭包函数访问外部变量的方法
2014/08/27 Javascript
jquery通过ajax加载一段文本内容的方法
2015/01/15 Javascript
详解基于 axios 的 Vue 项目 http 请求优化
2017/09/04 Javascript
JavaScript实现开关等效果
2017/09/08 Javascript
vue中for循环更改数据的实例代码(数据变化但页面数据未变)
2017/09/15 Javascript
vuejs实现递归树型菜单组件
2018/01/13 Javascript
JavaScript中EventBus实现对象之间通信
2020/10/18 Javascript
python将xml xsl文件生成html文件存储示例讲解
2013/12/03 Python
python 回调函数和回调方法的实现分析
2016/03/23 Python
利用Django-environ如何区分不同环境
2018/08/26 Python
Python Numpy库datetime类型的处理详解
2019/07/13 Python
Python读写文件模式和文件对象方法实例详解
2019/09/17 Python
Python3之乱码\xe6\x97\xa0\xe6\xb3\x95处理方式
2020/05/11 Python
Python调用飞书发送消息的示例
2020/11/10 Python
解决python3中os.popen()出错的问题
2020/11/19 Python
HTML5新特性之type=file文件上传功能
2018/02/02 HTML / CSS
银行实习生自我鉴定范文
2013/09/19 职场文书
校园门卫岗位职责
2013/12/09 职场文书
铲车司机岗位职责
2014/03/15 职场文书
中学生自我评价范文
2015/03/03 职场文书
2016春节家属慰问信
2015/03/25 职场文书
党风廉政承诺书2016
2016/03/25 职场文书
如何用python绘制雷达图
2021/04/24 Python
发工资啦!教你用Python实现邮箱自动群发工资条
2021/05/10 Python
Keras多线程机制与flask多线程冲突的解决方案
2021/05/28 Python
Golang的继承模拟实例
2021/06/30 Golang
Android studio 简单计算器的编写
2022/05/20 Java/Android