当前位置: 首页 > news >正文

Flask(补充内容)配置SSL 证书 实现 HTTPS 服务

没有加密的http服务,就像在裸泳,钻到水里便将你看个精光。数据在互联网上传输时,如果未经加密,随时可能被抓包软件抓住,里面的cookie、用户名、密码什么的,它会看得一清二楚,所以,只要你的项目上网,就必须加载ssl证书,它的重要性风云以前的博文有详细介绍,这里不再赘述。实现https服务,风云在flask系列博文有关于flask项目的安全与部署,但是部署ssl证书介绍得比较笼统,今天补充一篇,在 Flask 中配置 SSL 证书并实现 HTTPS 服务,步骤如下:

步骤 1:获取 SSL 证书

首先,您需要获得一个 SSL 证书。您可以选择购买一个商用证书,也可以使用免费证书提供商,如 Let's Encrypt。这里我们会使用 自签名证书 来做演示。

1.1 创建自签名 SSL 证书(适用于测试环境)

可以通过 OpenSSL 创建一个自签名证书,适合本地开发和测试。

命令:

openssl req -x509 -newkey rsa:4096 -keyout ssl.key -out ssl.crt -days 365

-newkey rsa:4096:生成 4096 位的 RSA 密钥。

-keyout ssl.key:指定私钥的保存文件。

-out ssl.crt:指定证书的保存文件。

-days 365:设置证书的有效期为 365 天。

生成的 ssl.key 为私钥,ssl.crt 为公钥证书。

看到生成的两个文件:ssl.crt、ssl.key 则表示成功。当然,此证书为自签名证书,只适合于测试环境,如果上生产环境,还需专有数字证书,可以上阿里云等申请时长为3个月的免费证书。

步骤 2:在 Flask 中配置 SSL 证书

Flask 的开发服务器支持通过 ssl_context 配置 SSL 证书。您只需在 app.run() 中设置相应的参数。

2.1 配置 Flask 启动 SSL 服务

首先,确保你已经生成了 SSL 证书文件和私钥文件(如 ssl.crt 和 ssl.key)。

然后,修改 Flask 应用启动代码,使其支持 HTTPS。

from flask import Flaskapp = Flask(__name__)@app.route('/')
def hello():return "Hello, SSL Flask!"if __name__ == '__main__':# 指定 SSL 证书和私钥文件app.run(ssl_context=('ssl.crt', 'ssl.key'), host='0.0.0.0', port=443, debug=True)

解释:

ssl_context=('ssl.crt', 'ssl.key'):通过此参数指定证书文件和私钥文件。

host='0.0.0.0':监听所有的 IP 地址。

port=443:使用 HTTPS 默认端口 443。

启动应用后,访问 https://localhost/ 即可通过 HTTPS 访问您的 Flask 应用。

步骤 3:配置 Nginx 作为反向代理

在生产环境中,建议通过 Nginx 作为反向代理将 HTTP 请求转发到 Flask 后端,提升性能和安全性。

3.1 安装 Nginx

sudo apt update

sudo apt install nginx

3.2 配置 Nginx 反向代理

编辑 Nginx 配置文件,配置 HTTPS 和反向代理。

sudo nano /etc/nginx/sites-available/yourapp

配置文件内容如下:

server {listen 443 ssl;server_name example.com;ssl_certificate /path/to/ssl.crt;ssl_certificate_key /path/to/ssl.key;location / {proxy_pass http://127.0.0.1:5000;  # Flask 应用监听的端口proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}
}server {listen 80;server_name example.com;return 301 https://$host$request_uri;  # 将所有 http 请求重定向到 https
}

解释:

listen 443 ssl;:Nginx 在端口 443 上监听 HTTPS 请求。

ssl_certificate 和 ssl_certificate_key:指定 SSL 证书和私钥路径。

proxy_pass:将请求代理到 Flask 后端应用(假设 Flask 应用运行在 5000 端口)。

return 301 https://$host$request_uri;:将所有的 HTTP 请求重定向到 HTTPS。

3.3 启动 Nginx

创建符号链接以启用配置,并重启 Nginx 服务:

sudo ln -s /etc/nginx/sites-available/yourapp /etc/nginx/sites-enabled/

sudo systemctl restart nginx

步骤 4:使用 Let's Encrypt 配置 HTTPS(生产环境)

对于生产环境,推荐使用 Let's Encrypt 免费的 SSL 证书。

4.1 安装 Certbot

首先,安装 Certbot 以便从 Let's Encrypt 获取 SSL 证书。

sudo apt install certbot python3-certbot-nginx

4.2 获取证书

使用 Certbot 自动获取并配置 SSL 证书:

sudo certbot --nginx -d example.com

Certbot 会自动为您生成证书并配置 Nginx。

4.3 自动续期

Let’s Encrypt 的证书有效期为 90 天,因此需要设置自动续期。您可以通过以下命令测试自动续期:

sudo certbot renew --dry-run

如果测试成功,Certbot 将在每次系统更新时自动续期证书。

总结

通过以下步骤,您可以在 Flask 应用中实现 HTTPS 服务:

获取 SSL 证书:可以使用自签名证书或者通过 Let's Encrypt 获取免费证书。

配置 Flask 启动 HTTPS 服务:使用 Flask 内置的 ssl_context 参数启动 HTTPS 服务。

配置 Nginx 反向代理:在生产环境中,使用 Nginx 来管理 HTTPS 连接,提升性能。

Let's Encrypt 配置:对于生产环境,使用 Certbot 获取免费的 SSL 证书并配置自动续期。

通过这些步骤,您可以成功在 Flask 应用中实现 HTTPS 服务,确保您的应用安全可靠。

相关文章:

  • Flask(2): 在windows系统上部署项目2
  • 【C】初阶数据结构10 -- 希尔排序
  • 知识库Qanyting部署问题总结
  • 使用sealos部署kubernetes集群并实现集群管理
  • Idea连接远程云服务器上的MySQL,开放云服务器端口
  • Markdown 教程
  • Linux驱动开发-①regmap②IIO子系统
  • Spring Boot 项目中发布流式接口支持实时数据向客户端推送
  • 【KWDB创作者计划】_KwDB2.2.0深度实践:从存储引擎到物联网场景的多模数据库实战
  • XSS之同源、跨域、内容安全策略
  • C语言——数组
  • 【网络技术_域名解析DNS】一、DNS 基础剖析及其原理
  • [轻量化超分]CAMixerSR: Only Details Need More “Attention“
  • HTML5好看的水果蔬菜在线商城网站源码系列模板5
  • 有什么工具可以在家连接到公司内网?局域网址提供异地公网访问的那些常用方法
  • CentOS系统-超详细的Kubernetes集群搭建教程(kubernetes:1.28.2)
  • Rust生命周期、文件与IO
  • 20.3 使用技巧3
  • Qwen2.5-VL视觉大语言模型复现过程,没碰到什么坑
  • 【AI量化第24篇】KhQuant 策略框架深度解析:让策略开发回归本质——基于miniQMT的量化交易回测系统开发实记
  • “一节课、两小时”,体育正在回归“C位”
  • 总粉丝破亿!当网络大V遇见硬核科技,互联网时代如何书写上海故事?
  • 上海“电子支付费率成本为0”背后:金融服务不仅“快”和“省”,更有“稳”和“准”
  • 明明睡够了,怎么还有黑眼圈?可能是身体在求救
  • 海关总署统计分析司司长:4月进出口增速较一季度加快4.3个百分点
  • 习近平同俄罗斯总统普京举行会谈