基于flask的网站如何使用https加密通信-问题记录
文章目录
- 项目场景:
- 问题1
- 问题描述
- 原因分析
- 解决步骤
- 解决方案
- 问题2
- 问题描述
- 原因分析
- 解决方案
- 参考文章

项目场景:
项目场景:基于flask的网站使用https加密通信一文中遇到的问题记录
问题1
问题描述
使用下面的命令生成自签名的SSL/TLS证书和私钥
openssl req -new -x509 -days 365 -nodes -out cert.pem -keyout key.pem
openssl: 这是调用OpenSSL程序的命令。req: 这是OpenSSL的请求(certificate request)命令,用于生成证书请求或自签名证书。-new: 这个选项告诉OpenSSL创建一个新的证书请求或证书。-x509: 这个选项指示OpenSSL生成一个X.509格式的证书。-days 365: 这个选项设置证书的有效期为365天。-nodes: 这个选项指定在生成私钥时不使用密码,即生成的私钥不会被加密。-out cert.pem: 这个选项指定生成的证书文件的名称和路径,这里是cert.pem。-keyout key.pem: 这个选项指定生成的私钥文件的名称和路径,这里是key.pem。
执行这个命令后,得到两个文件:cert.pem(证书文件)和key.pem(私钥文件)。这些文件可以用于配置Web服务器或其他需要SSL/TLS证书的服务。
这种方式生成的证书无法被浏览器信任,会在浏览器中产生安全警告, 即使在本地windows系统安装cert.pem证书后, 仍然提示不安全。

原因分析
- 原因未知
解决步骤
- 浏览器安装证书文件后
仍然发出安全提示。 - 升级openssl后重新生成证书和私钥,
仍然发出安全提示。- 查看openssl版本 , 版本有点老, 于是决定升级为
1.1.1k[root@centos~]# openssl version OpenSSl 1.0.2k-fips 26 Jan 2017 openssl升级命令# 步骤 1: 下载 OpenSSL 1.1.1k wget https://www.openssl.org/source/openssl-1.1.1k.tar.gz # 步骤 2: 解压源代码 tar -zxvf openssl-1.1.1k.tar.gz # 步骤 3: 编译并安装 cd openssl-1.1.1k ./config --prefix=/usr/local/openssl --openssldir=/usr/local/ssl shared zlib make sudo make install # 步骤 4: 首先备份旧版本的OpenSSL,然后创建软链接 mv /usr/bin/openssl /usr/bin/openssl.bak sudo ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl sudo ln -s /usr/local/openssl/include/openssl /usr/include/openssl # 更新动态链接库 sudo echo "/usr/local/openssl/lib" | sudo tee -a /etc/ld.so.conf sudo ldconfig # 验证新版本 openssl version
- 查看openssl版本 , 版本有点老, 于是决定升级为
- 生成
CA证书, 通过CA证书生成网站证书,仍然发出安全提示。- OpenSSL生成CA证书的步骤
# 步骤 1: 生成私钥, 使用以下命令生成CA的私钥。建议使用2048位或更高位数以确保安全性。 openssl genpkey -algorithm RSA -out ca.key -pkeyopt rsa_keygen_bits:2048 # 步骤 2: 创建自签名CA证书: # 使用私钥生成一个自签名的CA证书。你需要提供证书有效期、组织信息等。 openssl req -new -x509 -days 3650 -key ca.key -out ca.crt \ -subj "/C=US/ST=YourState/L=YourCity/O=YourOrganization/CN=YourCommonName" # 验证CA证书, 使用以下命令检查生成的CA证书是否正确: openssl x509 -in ca.crt -noout -text - CA证书生成网站服务器证书步骤
# 如果你需要生成服务器证书,并由CA签名,你可以创建一个CSR,然后使用CA的私钥来签发证书: # 步骤 1:生成服务器的私钥 openssl genpkey -algorithm RSA -out server.key -pkeyopt rsa_keygen_bits:2048 # 步骤 2: 创建CSR openssl req -new -key server.key -out server.csr \ -subj "/C=US/ST=YourState/L=YourCity/O=YourOrganization/CN=YourServerName" # 步骤 3:使用CA的私钥和证书签发证书 openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial \ -out server.crt -days 365 -sha256 # 验证签发的证书, 使用以下命令检查签发的证书是否正确: openssl x509 -in server.crt -noout -text
- OpenSSL生成CA证书的步骤
解决方案
-
方案一
- 配置文件
在myflaskapp/certs下创建文件·myflaskapp.com.conf, 增加下面配置信息[req] prompt = no default_bits = 4096 default_md = sha256 encrypt_key = no string_mask = utf8onlydistinguished_name = cert_distinguished_name req_extensions = req_x509v3_extensions x509_extensions = req_x509v3_extensions[ cert_distinguished_name ] C = CN ST = BJ L = BJ O = HomeLab OU = HomeLab CN = myflaskapp.com[req_x509v3_extensions] basicConstraints = critical,CA:true subjectKeyIdentifier = hash keyUsage = critical,digitalSignature,keyCertSign,cRLSign #,keyEncipherment extendedKeyUsage = critical,serverAuth,clientAuth subjectAltName = @alt_names[alt_names] DNS.1 = myflaskapp.com DNS.2 = *.myflaskapp.com - 生成 SSL 证书和私钥:
我们还需要一个 SSL 证书和私钥, 基于配置文件,使用 OpenSSL 来生成自签名的证书, 如下所示:
这将生成一个有效期为 3600 天的自签名证书# 定义文件名称 OUTPUT_FILENAME="myflaskapp.com" # 生成证书和私钥 openssl req -x509 -newkey rsa:2048 \ -keyout $OUTPUT_FILENAME.key \ -out $OUTPUT_FILENAME.crt \ -days 3600 -nodes \ -config ${OUTPUT_FILENAME}.confmyflaskapp.com.crt和私钥myflaskapp.com.key。
- 配置文件
-
方案二
使用
mkcert命令。- 安装
mkcert# 根据自己的系统,下载最新的二进制文件 wget -O mkcert https://github.com/FiloSottile/mkcert/releases/download/v1.4.3/mkcert-v1.4.3-linux-amd64 # 二进制文件添加可执行权限,并移动到 $PATH 中 chmod +x mkcert mv mkcert /usr/local/bin/ # 查看版本 mkcert -version - 生成根证书
mkcert -install - 生成服务器证书
mkcert myflaskapp.com - PC安装根证书
# 查看根证书位置 mkcert -CAROOT /root/.local/share/mkcert/root/.local/share/mkcert中有两个文件:rootCA-key.pem和rootCA.pem。将rootCA.pem复制到 PC 上,并将其后缀改为.crt。双击安装即可,注意选择受信任的根证书颁发机构。
- 安装
问题2
问题描述
- Nginx反向代理, PC浏览器无法访问网站。 配置文件
myflaskapp/nginx/myflaskapp.conf中设置反向代理规则如下:server {listen 80;server_name myflaskapp.com;return 301 https://$server_name$request_uri; }server {listen 443 ssl;server_name myflaskapp.com www.myflaskapp.com;ssl_certificate /etc/nginx/ssl/cert.pem;ssl_certificate_key /etc/nginx/ssl/key.pem;location / {proxy_pass http://127.0.0.1:5000;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;} }
原因分析
- nginx使用的是docker启动,
proxy_pass http://127.0.0.1:5000代理地址配置的容器的地址, 而容器内并没有web服务,所以代理没有成功
解决方案
- 在 Nginx 配置文件
myflaskapp/nginx/myflaskapp.conf中将proxy_pass http://127.0.0.1:5000代理地址的IP修改为宿主机IPproxy_pass http://<your-host-ip>:5000即可。
参考文章
- CentOS7.9下升级OpenSSL到OpenSSL 1.1.1k
- 一个一键即可生成SSL证书的工具,零配置,从此告别繁琐,Star 46K+!
- mkcert 使用指南:如何快速创建自签名 SSL 证书
相关文章:
基于flask的网站如何使用https加密通信-问题记录
文章目录 项目场景:问题1问题描述原因分析解决步骤解决方案 问题2问题描述原因分析解决方案 参考文章 项目场景: 项目场景:基于flask的网站使用https加密通信一文中遇到的问题记录 问题1 问题描述 使用下面的命令生成自签名的SSL/TLS证书和…...
记C#优化接口速度过程
前提摘要 首先这个项目是接手的前一任先写的项目,接手后,要求对项目一些速度相对较慢的接口进行优化,到第一个速度比较慢的接口后,发现单接口耗时4-8秒,是的,请求同一个接口,在参数不变的情况下…...
windows环境如何运行python/java后台服务器进程而不显示控制台窗口
1.通常我们在windows环境下使用Java或Python语言编写服务器程序,都希望他在后台运行,不要显示黑乎乎的控制台窗口: 2.有人写了一个bat文件: cd /d D:\lottery\server && python .\main.py 放到了开机自启动里,可是开机的…...
记周末百度云防御CC攻击事件
今天一早,收到百度智能云短信提醒,一位客户的网站遭遇了CC攻击。 主机吧赶紧登陆客户网站查看,是否正常,看是否需要通知客户。 结果打开正常,看情况并没什么影响,那就等攻击结果了再看吧。 下午的时候&am…...
vue中v-bind控制class和style
当使用v-bind指令控制class和style时,可以通过动态绑定的方式根据不同的条件来添加或移除class,以及改变元素的样式。 1. 控制class 通过v-bind:class可以动态绑定class属性。可以使用对象语法、数组语法或者计算属性来实现。 对象语法:使用…...
【面试经典150题】【双指针】392. 判断子序列
题目链接 https://leetcode.cn/problems/is-subsequence/?envTypestudy-plan-v2&envIdtop-interview-150 题解思路 首先如果s的长度大于t的长度,那么s肯定不是t的子序列如果s的长度等于t的长度,那么st的情况下s才是t的子序列如果s的长度小于t的长…...
禁用PS/Photoshop等一系列Adobe旗下软件联网外传用户数据操作
方案一: 下载火绒杀毒,在联网请求上禁用Adobe软件的联网请求,甚至还可以额外发现哪些是它要想要偷偷摸摸干的。 方案二: 最后注意: 用盗版软件只是获得了使用权!...
C语言猜输赢游戏
目录 开头游戏的程序游戏的流程图结尾 开头 大家好,我叫这是我58,现在,请你看一下下面的游戏程序。 游戏的程序 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <Windows.h> int main() {int i 1;int ia 0…...
Rust 异步 trait 的实现困难
在 Rust 中,异步编程是使用 async/await 语法来实现的。与传统的同步编程不同,异步编程涉及到的特性较多,其中一个重要的特性是异步 trait。 异步 trait 是具有异步方法的 trait。在 Rust 中,trait 方法默认是同步的,…...
腾讯云和windows11安装frp,实现内网穿透
一、内网穿透目的 实现公网上,访问到windows上启动的web服务 二、内网穿透的环境准备 公网服务器、windows11的电脑、frp软件(需要准备两个软件,一个是安装到公网服务器上的,一个是安装到windows上的) frp下载地址下载版本 1.此版本(老版…...
Solidity智能合约事件(event)
文章目录 Solidity智能合约事件(event)什么是event事件event有什么作用日志内容位于区块链的什么地方?【重要】以太坊交易获取如何在 Solidity 中使用事件?参考 Solidity智能合约事件(event) 什么是event EVM有一个日志功能,用于将数据“写…...
第2章 Rust初体验7/8:错误处理时不关心具体错误类型的下划线:提高代码可读性:猜骰子冷热游戏
讲动人的故事,写懂人的代码 2.6.6 用as进行类型转换:显式而简洁的语法 贾克强:“大家在查看Rust代码时,可能会注意到这一句。在这里,如果我们不使用as i32,编译器会报错,因为它在u32中找不到abs()方法。这是因为prev和sum_of_two_dice都是u32类型,u32类型并不支持abs(…...
大话C语言:第24篇 预处理
1 C语言编译流程 C语言的编译流程包括: 预编译:将.c 中的头文件展开、宏展开,生成的文件是.i 文件。gcc指令:gcc -E file.c -o file.i 编译:将预处理之后的.i 文件生成 .s 汇编文件。gcc指令:gcc -S file…...
React如何配置路由
ReactTs配置路由 安装依赖 npm i react-router-dom在routers下面创建index.tsx import { RouteObject } from react-router-dom import React from react import PageA from /views/PageA import PageB from /views/PageB const routes: RouteObject[] [{path: /,element: …...
MAC使用初体验+入门
之前从来没有使用过MAC,这次拿到了一个 不得不说MAC度过适应期后用起来很舒服,续航长,触控板舒服,轻薄无比 我前期过度的时候记录的一部分快速指南,掌握如下一些电脑常识 可以做到正常使用了 基本操作 在 Mac 上使用桌…...
Go TOKEN机制与跨域处理方式
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…...
JavaScript 的运行
语法分析预编译解释执行 1.语法分析 语法分析是 JavaScript 引擎处理代码的第一步。 在这个阶段,引擎将源代码字符串分解成一个个的词素(token),这些词素是语言中有意义的最小单元,如关键字、变量名、操作符等。 语…...
园区地图导航系统:技术原理、部署方案与智能化应用解析
随着智能化时代的到来,园区管理面临诸多挑战。维小帮园区地图导航系统,采用前沿技术,为园区提供全面的导航解决方案,极大提升了园区管理效率和用户体验。 一、园区地图导航系统的功能特点 维小帮园区地图导航系统,以其…...
【数据结构】第十六弹---C语言实现希尔排序
✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】 目录 1、希尔排序( 缩小增量排序 ) 1.1、预排序实现 1.2、希尔排序代码实现 1.3、代码测试 1.4、时空复杂度分析 1.5、性能比较 总结 上一弹我们…...
用Python向Word文档添加页眉和页脚
用Python向Word文档添加页眉和页脚 添加页眉和页脚效果代码 添加页眉和页脚 在本文中,我们将用python向文档中添加页眉和页脚。 效果 添加前的文档: 添加页眉和页脚后: 代码 from docx import Documentdef add_header_footer(doc_path…...
造相-Z-Image-Turbo亚洲美女LoRA实战:小宇宙播客封面图情绪传达技巧
造相-Z-Image-Turbo亚洲美女LoRA实战:小宇宙播客封面图情绪传达技巧 1. 项目介绍与核心价值 今天要分享的是一个特别实用的AI工具——基于Z-Image-Turbo的亚洲美女LoRA图片生成服务。这个工具专门为内容创作者设计,特别是小宇宙播客的主播们࿰…...
保姆级教程:在Ubuntu 20.04上为ZYNQ配置Linaro GCC 10.3交叉编译环境(含阿里云源和依赖库避坑)
从零构建ZYNQ嵌入式开发环境:Linaro GCC 10.3全流程实战指南 在嵌入式开发领域,为特定硬件平台搭建高效的交叉编译环境往往是项目成功的第一步。对于Xilinx ZYNQ系列这种集成了ARM Cortex-A系列处理器和FPGA的异构计算平台而言,选择合适的工…...
【Polars 2.0数据清洗成本控制白皮书】:20年ETL专家亲授5大降本增效实战模式,92%企业忽略的内存泄漏陷阱
第一章:Polars 2.0数据清洗成本控制全景认知在现代数据工程实践中,数据清洗不再仅关乎逻辑正确性,更深度绑定计算资源消耗、内存占用与执行延迟。Polars 2.0 通过零拷贝语义、惰性执行引擎重构与 Arrow-native 内存布局优化,将清洗…...
解密革命性构建工具:PoeCharm如何突破传统限制实现高效角色规划
解密革命性构建工具:PoeCharm如何突破传统限制实现高效角色规划 【免费下载链接】PoeCharm Path of Building Chinese version 项目地址: https://gitcode.com/gh_mirrors/po/PoeCharm 在流放之路的复杂游戏生态中,角色构建往往成为玩家面临的最大…...
DeepSeek-R1-Distill-Qwen-1.5B响应慢?函数调用优化实战解决方案
DeepSeek-R1-Distill-Qwen-1.5B响应慢?函数调用优化实战解决方案 你是不是也遇到过这种情况:好不容易在本地部署了DeepSeek-R1-Distill-Qwen-1.5B这个“小钢炮”模型,结果发现函数调用时响应特别慢?明明官方说RTX 3060能跑200 to…...
vue3-count-to避坑指南:数字增长动画的7个常见问题与解决方案
Vue3-Count-To深度避坑实战:数字动画7大疑难解析 数字动态增长效果在数据可视化、金融仪表盘和运营数据展示中扮演着关键角色。vue3-count-to作为Vue3生态中专精于此的轻量级库,虽然API简洁,但在真实业务场景中往往会遇到各种边界情况。本文将…...
OpenCV图像预处理失效全解析,深度解读光照不均、反光伪影、亚像素抖动下的鲁棒代码实现
第一章:OpenCV图像预处理失效的典型工业场景综述在工业视觉检测系统中,OpenCV常被用作图像预处理的核心工具,但其默认参数与理想假设在真实产线环境中频繁失效。光照剧烈波动、镜头污损、金属反光、高速运动拖影以及低信噪比成像等物理约束&a…...
微信公众号开发入门:手把手教你配置接口信息(含服务器设置指南)
微信公众号开发从零到一:接口配置全流程详解 第一次接触微信公众号开发时,很多人会被"接口配置"这个概念吓到。作为一个从零开始摸索过来的开发者,我深知那种面对陌生术语时的茫然感。实际上,接口配置并没有想象中那么复…...
Cursor Pro功能解锁指南:突破限制的完整技术方案
Cursor Pro功能解锁指南:突破限制的完整技术方案 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your trial re…...
【Python 3.15 JIT终极指南】:20年CPython核心开发者亲授,从零部署到性能翻倍的5个关键跃迁
第一章:Python 3.15 JIT的诞生背景与核心设计哲学 Python 长期以来以开发效率和生态丰富性见长,但其解释执行模型在 CPU 密集型场景下始终面临性能瓶颈。CPython 的字节码解释器虽稳定可靠,却缺乏运行时优化能力;而第三方方案&…...
