在 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定时检查启动某个exe程序适合检测exe是否挂了
Jan 21 Python
Python求两个list的差集、交集与并集的方法
Nov 01 Python
python 数据清洗之数据合并、转换、过滤、排序
Feb 12 Python
python+selenium实现登录账户后自动点击的示例
Dec 22 Python
Python编程深度学习绘图库之matplotlib
Dec 28 Python
基于Django静态资源部署404的解决方法
Jul 28 Python
python3实现mysql导出excel的方法
Jul 31 Python
Python列表切片常用操作实例解析
Dec 16 Python
Matplotlib使用Cursor实现UI定位的示例代码
Mar 12 Python
Python3安装模块报错Microsoft Visual C++ 14.0 is required的解决方法
Jul 28 Python
Python configparser模块封装及构造配置文件
Aug 07 Python
pdf论文中python画的图Type 3 fonts字体不兼容的解决方案
Apr 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
博士208HAF收音机实习报告
2021/03/02 无线电
PHP 加密/解密函数 dencrypt(动态密文,带压缩功能,支持中文)
2009/01/30 PHP
php实现的获取网站备案信息查询代码(360)
2013/09/23 PHP
Smarty最简单实现列表奇偶变色的方法
2015/07/01 PHP
CentOS下搭建PHP环境与WordPress博客程序的全流程总结
2016/05/07 PHP
一步一步教你写一个jQuery的插件教程(Plugin)
2009/09/03 Javascript
jquery入门—选择器实现隔行变色实例代码
2013/01/04 Javascript
jQuery回调函数的定义及用法实例
2014/12/23 Javascript
javascript事件冒泡和事件捕获详解
2015/05/26 Javascript
jQuery点击输入框显示验证码图片
2016/05/19 Javascript
JS实现的自定义水平滚动字体插件完整实例
2016/06/17 Javascript
js正则表达式验证表单【完整版】
2017/03/06 Javascript
如何通过非数字与字符的方式实现PHP WebShell详解
2017/07/02 Javascript
JS 学习总结之正则表达式的懒惰性和贪婪性
2017/07/03 Javascript
详解前端路由实现与react-router使用姿势
2017/08/07 Javascript
vue-image-crop基于Vue的移动端图片裁剪组件示例
2018/08/28 Javascript
详解JavaScript添加给定的标签选项
2018/09/17 Javascript
layui prompt 设置允许空白提交的方法
2019/09/24 Javascript
Vue仿百度搜索功能
2020/12/28 Vue.js
Python装饰器使用示例及实际应用例子
2015/03/06 Python
Python运用于数据分析的简单教程
2015/03/27 Python
PyQt5打开文件对话框QFileDialog实例代码
2018/02/07 Python
python如何发布自已pip项目的方法步骤
2018/10/09 Python
使用pip安装python库的多种方式
2019/07/31 Python
基于MUI框架使用HTML5实现的二维码扫描功能
2018/03/01 HTML / CSS
amazeui页面分析之登录页面的示例代码
2020/08/25 HTML / CSS
波兰数码相机及配件网上商店: Cyfrowe.pl
2017/06/19 全球购物
美国男士和女士奢侈品折扣手表购物网站:Certified Watch Store
2018/06/13 全球购物
网站设计师的岗位职责
2013/11/21 职场文书
优秀村官事迹材料
2014/01/10 职场文书
中学家长会邀请函
2014/02/03 职场文书
服务之星事迹材料
2014/05/03 职场文书
关于环保的活动方案
2014/08/25 职场文书
2015年质量月活动总结报告
2015/03/27 职场文书
怎样写家长意见
2015/06/04 职场文书
Html5调用企业微信的实现
2021/04/16 HTML / CSS