前言
这一篇是详细描述在Flask框架下中使用HTTPS的教程。
开发工具
- Windows 10 x64
- Python2/3
- Flask 0.12
- CA证书
准备工作
首先要有CA证书,由于这篇是示例教程,所以使用自签证书即可。生成自签证书可以参考这里:《在局域网里创建个人CA证书》。
根据上面的教程,我们手上就已经有了CA根证书、server证书和client证书。client证书暂时用不上。
代码示例
首先上一份代码示例hello.py
:
# coding=utf-8
# Python 2
"""
除了安装Flask,还需要安装 Python 的 openssl 的类库:
pip install pyOpenSSL
"""
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return "Hello World"
if __name__ == '__main__':
app.run(ssl_context='adhoc')
上面代码是使用本机的证书,如果自定义证书路径,可以改成下面的代码。
# ……
if __name__ == '__main__':
app.run(debug=True, ssl_context=(
"server/server-cert.pem",
"server/server-key.pem")
)
启动项目后,浏览器访问https://127.0.0.1:5000/
,会出现下面页面。
这是由于浏览器还没有相关证书的原因。
进入浏览器设置找到「证书管理」,在「受信任的根证书颁发机构」添加之前生成的CA证书(不是server证书)。
重启浏览器,再次访问https://127.0.0.1:5000/
,出现
成功!
要在Gunicorn中使用HTTPS,输入下面命令即可
gunicorn -b0: hello:app --keyfile server/server-key.pem --certfile server/server-cert.pem
注意事项
- 浏览器导入证书需要
.p12
格式文件。