在 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模块restful使用方法实例
Dec 10 Python
Python实现把json格式转换成文本或sql文件
Jul 10 Python
Python与R语言的简要对比
Nov 14 Python
pycharm远程调试openstack的图文教程
Nov 21 Python
Python编写一个优美的下载器
Apr 15 Python
通过Python模块filecmp 对文件比较的实现方法
Jun 29 Python
python实现三维拟合的方法
Dec 29 Python
python读写配置文件操作示例
Jul 03 Python
Python爬虫如何应对Cloudflare邮箱加密
Jun 24 Python
python3排序的实例方法
Oct 20 Python
python函数超时自动退出的实操方法
Dec 28 Python
Python接口自动化系列之unittest结合ddt的使用教程详解
Feb 23 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把session写入数据库示例
2014/02/26 PHP
解密ThinkPHP3.1.2版本之模板继承
2014/06/19 PHP
自写的利用PDO对mysql数据库增删改查操作类
2018/02/19 PHP
thinkPHP框架整合tcpdf插件操作示例
2018/08/07 PHP
PHP PDOStatement::bindParam讲解
2019/01/30 PHP
JavaScript网页制作特殊效果用随机数
2007/05/22 Javascript
JavaScript中创建类/对象的几种方法总结
2013/11/29 Javascript
js 数值转换为3位逗号分隔的示例代码
2014/02/19 Javascript
我的Node.js学习之路(三)--node.js作用、回调、同步和异步代码 以及事件循环
2014/07/06 Javascript
jQuery中Form相关知识汇总
2015/01/06 Javascript
简介JavaScript中的italics()方法的使用
2015/06/08 Javascript
JS实现的仿QQ空间图片弹出效果代码
2016/02/23 Javascript
Ionic如何创建APP项目
2016/06/03 Javascript
leaflet的开发入门教程
2016/11/17 Javascript
Javascript之深入浅出prototype
2017/02/06 Javascript
Javascript中 toFixed四舍六入方法
2017/08/21 Javascript
js实现canvas保存图片为png格式并下载到本地的方法
2017/08/31 Javascript
基于vue-simplemde实现图片拖拽、粘贴功能
2018/04/12 Javascript
jQuery实现获取当前鼠标位置并输出功能示例
2019/01/05 jQuery
JavaScript判断数组类型的方法
2019/10/23 Javascript
javscript 数组扁平化的实现
2020/02/03 Javascript
jQuery实现简单QQ聊天框
2020/08/27 jQuery
Vue父子组件传值的一些坑
2020/09/16 Javascript
Python操作串口的方法
2015/06/17 Python
浅谈python中字典append 到list 后值的改变问题
2018/05/04 Python
python爬虫获取小区经纬度以及结构化地址
2018/12/30 Python
详解Django将秒转换为xx天xx时xx分
2019/09/27 Python
python的reverse函数翻转结果为None的问题
2020/05/11 Python
python写文件时覆盖原来的实例方法
2020/07/22 Python
美国隐形眼镜零售商:LensPure
2019/03/10 全球购物
华为c/c++笔试题
2016/01/25 面试题
就业自荐信
2013/12/04 职场文书
项目合作计划书
2014/01/09 职场文书
小学生国旗下演讲稿
2014/04/25 职场文书
三严三实对照检查材料思想汇报
2014/09/28 职场文书
一篇文章带你掌握SQLite3基本用法
2022/06/14 数据库