在 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中动态获取对象的属性和方法的教程
Apr 09 Python
Python实现FTP上传文件或文件夹实例(递归)
Jan 16 Python
基于python绘制科赫雪花
Jun 22 Python
Django基础知识与基本应用入门教程
Jul 20 Python
python pandas消除空值和空格以及 Nan数据替换方法
Oct 30 Python
python使用udp实现聊天器功能
Dec 10 Python
Flask框架web开发之零基础入门
Dec 10 Python
python第三方库学习笔记
Feb 07 Python
python库skimage给灰度图像染色的方法示例
Apr 27 Python
Python Opencv实现单目标检测的示例代码
Sep 08 Python
如何用Python 加密文件
Sep 10 Python
详解Python中string模块除去Str还剩下什么
Nov 30 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 安全检测代码片段(分享)
2013/07/05 PHP
ubuntu12.04使用c编写php扩展模块教程分享
2013/12/25 PHP
php绘图之生成饼状图的方法
2015/01/24 PHP
php上传excel表格并获取数据
2017/04/27 PHP
PHP开发实现快递查询功能详解
2019/04/08 PHP
laravel 中某一字段自增、自减的例子
2019/10/11 PHP
jQuery代码优化 选择符篇
2011/11/01 Javascript
JS在TextArea光标位置插入文字并实现移动光标到文字末尾
2013/06/21 Javascript
jQuery制作简洁的图片轮播效果
2015/04/03 Javascript
浅析JavaScript声明变量
2015/12/21 Javascript
jQuery使用中可能被XSS攻击的一些危险环节提醒
2016/05/24 Javascript
JS实现星星评分功能实例代码(两种方法)
2016/06/09 Javascript
浅谈JQuery+ajax+jsonp 跨域访问
2016/06/25 Javascript
巧用jQuery选择器提高写表单效率的方法
2016/08/19 Javascript
vue loadmore组件上拉加载更多功能示例代码
2017/07/19 Javascript
ES6关于Promise的用法详解
2018/05/07 Javascript
基于PHP pthreads实现多线程代码实例
2020/06/24 Javascript
[38:42]完美世界DOTA2联赛循环赛 Matador vs Forest BO2第二场 11.05
2020/11/05 DOTA
python动态性强类型用法实例
2015/05/09 Python
python制作爬虫并将抓取结果保存到excel中
2016/04/06 Python
利用numpy和pandas处理csv文件中的时间方法
2018/04/19 Python
Python实现的redis分布式锁功能示例
2018/05/29 Python
python 反编译exe文件为py文件的实例代码
2019/06/27 Python
python解释器spython使用及原理解析
2019/08/24 Python
如何配置关联Python 解释器 Anaconda的教程(图解)
2020/04/30 Python
CSS3 滤镜 webkit-filter详细介绍及使用方法
2012/12/27 HTML / CSS
暑假实习求职信范文
2013/09/22 职场文书
会计电算化个人求职信范文
2014/01/24 职场文书
不打扫卫生检讨书
2014/02/12 职场文书
会走路的树教学反思
2014/02/20 职场文书
2019终止劳动合同协议书最新范本!
2019/07/09 职场文书
自制短波长线天线频率预选器 - 成功消除B2K之流的镜像
2021/04/22 无线电
【TED出品】天梯非主流开心游1700 划水骑士
2022/03/31 魔兽争霸
springcloud整合seata
2022/05/20 Java/Android
JavaScript正则表达式实现注册信息校验功能
2022/05/30 Java/Android
sql注入报错之注入原理实例解析
2022/06/10 MySQL