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 服务,确保您的应用安全可靠。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/77159.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云服务器CVM标准型S5实例性能测评——2025腾讯云

腾讯云服务器CVM标准型S5实例具有稳定的计算性能,CPU采用采用 Intel Xeon Cascade Lake 或者 Intel Xeon Cooper Lake 处理器,主频2.5GHz,睿频3.1GHz,CPU内存配置2核2G、2核4G、4核8G、8核16G等配置,公网带宽可选1M、3…

什么是智算中心

智算中心是一种专门为智能计算提供强大算力支持的基础设施,以下是关于它的详细介绍: 定义与功能 智算中心是基于强大的计算能力,特别是针对人工智能算法进行优化的计算中心。它集成了大量的高性能计算设备,如 GPU 集群、FPGA 阵…

注意力机制是如何实现的

注意力机制的实现可以分解为几个核心步骤,其本质是通过动态计算权重,决定不同位置信息的重要性,再对信息进行加权融合。以下从数学原理、代码实现到直观解释逐步展开: 一、核心实现步骤 以最常见的**点积注意力(Dot-P…

【裁员感想】

裁员感想 今天忽然感觉很emo 因为知道公司要裁员 年中百分之10 年末百分十10 我知道这个百分20会打到自己 所以还挺不开心的 我就想起 我的一个亲戚当了大学老师 我觉得真的挺好的 又有寒暑假 又不是很累 薪资也不低 又是编制 同时也觉得自己很失败 因为对自己互联网的工作又…

从信号处理角度理解图像处理的滤波函数

目录 1、预备知识 1.1 什么是LTI系统? 1.1.1 首先来看什么是线性系统,前提我们要了解什么是齐次性和叠加性。

目标检测概述

为什么基于卷积网络的目标检测模型在预测后要使用非极大值抑制 基于卷积网络的目标检测模型可能会在目标的相邻区域生成多个相互重叠框,每个框的预测结果都是同一个目标,引起同一目标的重复检测。造成这一现象的原因主要有两个, 基于卷积网络…

【JAVA】在idea新加artifact时,点击Build-Build Artifacts时,新加的artifact不能选中

首先保证添加artifact无问题,比如依赖都正确、无重复命令的情况等 办法 一 File > Invalidate Caches / Restart。 重启IDEA后,重新检查Artifact是否可选 办法 二 打开 Project Structure(CtrlShiftAltS)。 进入 Artifacts 选…

Paramiko 使用教程

目录 简介安装 Paramiko连接到远程服务器执行远程命令文件传输示例 简介 Paramiko 是一个基于 Python 的 SSH 客户端库,它提供了在网络上安全传输文件和执行远程命令的功能。本教程将介绍 Paramiko 的基本用法,包括连接到远程服务器、执行命令、文件传输…

《TCP/IP网络编程》学习笔记 | Chapter 24:制作 HTTP 服务器端

《TCP/IP网络编程》学习笔记 | Chapter 24:制作 HTTP 服务器端 《TCP/IP网络编程》学习笔记 | Chapter 24:制作 HTTP 服务器端HTTP 概要理解 Web 服务器端无状态的 Stateless 协议请求消息(Request Message)的结构响应消息&#x…

【Quest开发】在虚拟世界设置具有遮挡关系的透视窗口

软件:Unity 2022.3.51f1c1、vscode、Meta XR All in One SDK V72 硬件:Meta Quest3 仅针对urp管线 参考了YY老师这篇,可以先看他的再看这个可能更好理解一些:Unity Meta Quest MR 开发(七):使…

GPU 招投标全流程分析与总结

GPU 招投标全流程分析与总结 招投标流程概述 以下是通过代理商采购Nvidia H20-GPU 141G的招投标全流程分析: #mermaid-svg-hMPPfkCpGj8GKXfV {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-hMPPfkCpGj8GKXfV .er…

[C++] STL中的向量容器<vector>附加练习

目录 讲在前面(必看)八卦阵题目描述输入格式输出格式输入输出样例数据范围AC代码及要点 决赛应援题目描述输入格式输出格式输入输出样例数据范围AC代码及要点 讲在前面(必看) 本篇为练习篇, vector讲解篇在这里. 菜鸟食用前请做好心理准备(你懂的) 八卦阵 题目描述 n 名同学…

基于SpringBoot+Vue3实现的宠物领养管理平台功能一

一、前言介绍: 1.1 项目摘要 随着社会经济的发展和人们生活水平的提高,越来越多的人开始关注并参与到宠物领养中。宠物已经成为许多家庭的重要成员,人们对于宠物的关爱和照顾也日益增加。然而,传统的宠物领养流程存在诸多不便&a…

parameter和localparam的区别(verilog中)

在Verilog中,parameter 和 localparam 都用于定义常量,但是它们之间有一些重要的区 作用范围: parameter:可以在模块外部被修改或重定义。它可以被作为模块的参数传递给其他模块,因此具有较广泛的作用范围,…

鸿蒙API15 “一多开发”适配:解锁黄金三角法则,开启高效开发新旅程

一、引言 在万物互联的时代浪潮中,鸿蒙操作系统以其独特的 “一多开发” 理念,为开发者打开了一扇通往全场景应用开发的新大门。“一多开发”,即一次开发,多端部署 ,旨在让开发者通过一套代码工程,就能高效…

Linux中docker容器拉取镜像失败解决方案

查看 /etc/systemd/system/docker.service.d/http-proxy.conf 文件(没有则新建),查看自定义 Docker 服务的代理设置 输入内容 [Service] Environment"HTTP_PROXYsocks5://10.211.13.214:7890" Environment"HTTPS_PROXYsocks…

半导体设备通信标准—secsgem v0.3.0版本使用说明文档(2)之GEM(SEMI 30)

文章目录 1、处理器1.1、事件 2、GEM 合规性2.1、状态模型2.2、 设备加工状态2.3、 文档2.4、 控制 (作员启动)2.5、 动态事件报告配置2.6、 跟踪数据收集2.7、 报警管理2.8、 远程控制2.9、 设备常量2.10、 工艺配方管理2.11、 物料移动2.12、 设备终端…

每日算法-链表(23.合并k个升序链表、25.k个一组翻转链表)

一.合并k个升序链表 1.1题目描述 1.2题解思路 解法一:小根堆 我们可以先定义一个小根堆,将k个指针的头结点如堆,每次取堆顶元素尾插到newhead中,然后再pop(),接着push堆顶原来堆顶元素的下一个节点 重点分析&#…

Java性能剖析工具箱

1. 基础知识 1.1 Java性能调优概述 1.1.1 性能调优的重要性 性能调优是提升系统效率、降低成本和增强用户体验的关键步骤。通过优化,可以减少响应时间、降低资源消耗并提高系统的稳定性和可扩展性。 1.1.2 性能问题的常见表现 高CPU使用率:可能由热点方法或线程阻塞引起。…

如何使用SpringApplicationRunListener在Spring Boot 应用的不同生命周期阶段插入自定义逻辑

目录 一、引言二、核心方法概述三、加载机制四、使用场景五、扩展 - 如何在测试的不同阶段插入逻辑5.1 TestExecutionListener & AbstractTestExecutionListener5.1.1 主要功能5.1.2 生命周期方法 5.2 如何集成TestExecutionListener5.3 总结 一、引言 SpringApplicationR…