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

基于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
      
  • 生成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
      

解决方案

  1. 方案一

    • 配置文件
      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 来生成自签名的证书, 如下所示:
      # 定义文件名称
      OUTPUT_FILENAME="myflaskapp.com"
      # 生成证书和私钥
      openssl req -x509 -newkey rsa:2048 \
      -keyout $OUTPUT_FILENAME.key \
      -out $OUTPUT_FILENAME.crt \
      -days 3600 -nodes \
      -config ${OUTPUT_FILENAME}.conf
      
      这将生成一个有效期为 3600 天的自签名证书 myflaskapp.com.crt 和私钥 myflaskapp.com.key
  2. 方案二

    使用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.pemrootCA.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加密通信-问题记录

文章目录 项目场景&#xff1a;问题1问题描述原因分析解决步骤解决方案 问题2问题描述原因分析解决方案 参考文章 项目场景&#xff1a; 项目场景&#xff1a;基于flask的网站使用https加密通信一文中遇到的问题记录 问题1 问题描述 使用下面的命令生成自签名的SSL/TLS证书和…...

记C#优化接口速度过程

前提摘要 首先这个项目是接手的前一任先写的项目&#xff0c;接手后&#xff0c;要求对项目一些速度相对较慢的接口进行优化&#xff0c;到第一个速度比较慢的接口后&#xff0c;发现单接口耗时4-8秒&#xff0c;是的&#xff0c;请求同一个接口&#xff0c;在参数不变的情况下…...

windows环境如何运行python/java后台服务器进程而不显示控制台窗口

1.通常我们在windows环境下使用Java或Python语言编写服务器程序&#xff0c;都希望他在后台运行&#xff0c;不要显示黑乎乎的控制台窗口&#xff1a; 2.有人写了一个bat文件: cd /d D:\lottery\server && python .\main.py 放到了开机自启动里&#xff0c;可是开机的…...

记周末百度云防御CC攻击事件

今天一早&#xff0c;收到百度智能云短信提醒&#xff0c;一位客户的网站遭遇了CC攻击。 主机吧赶紧登陆客户网站查看&#xff0c;是否正常&#xff0c;看是否需要通知客户。 结果打开正常&#xff0c;看情况并没什么影响&#xff0c;那就等攻击结果了再看吧。 下午的时候&am…...

vue中v-bind控制class和style

当使用v-bind指令控制class和style时&#xff0c;可以通过动态绑定的方式根据不同的条件来添加或移除class&#xff0c;以及改变元素的样式。 1. 控制class 通过v-bind:class可以动态绑定class属性。可以使用对象语法、数组语法或者计算属性来实现。 对象语法&#xff1a;使用…...

【面试经典150题】【双指针】392. 判断子序列

题目链接 https://leetcode.cn/problems/is-subsequence/?envTypestudy-plan-v2&envIdtop-interview-150 题解思路 首先如果s的长度大于t的长度&#xff0c;那么s肯定不是t的子序列如果s的长度等于t的长度&#xff0c;那么st的情况下s才是t的子序列如果s的长度小于t的长…...

禁用PS/Photoshop等一系列Adobe旗下软件联网外传用户数据操作

方案一&#xff1a; 下载火绒杀毒&#xff0c;在联网请求上禁用Adobe软件的联网请求&#xff0c;甚至还可以额外发现哪些是它要想要偷偷摸摸干的。 方案二&#xff1a; 最后注意&#xff1a; 用盗版软件只是获得了使用权&#xff01;...

C语言猜输赢游戏

目录 开头游戏的程序游戏的流程图结尾 开头 大家好&#xff0c;我叫这是我58&#xff0c;现在&#xff0c;请你看一下下面的游戏程序。 游戏的程序 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <Windows.h> int main() {int i 1;int ia 0…...

Rust 异步 trait 的实现困难

在 Rust 中&#xff0c;异步编程是使用 async/await 语法来实现的。与传统的同步编程不同&#xff0c;异步编程涉及到的特性较多&#xff0c;其中一个重要的特性是异步 trait。 异步 trait 是具有异步方法的 trait。在 Rust 中&#xff0c;trait 方法默认是同步的&#xff0c;…...

腾讯云和windows11安装frp,实现内网穿透

一、内网穿透目的 实现公网上&#xff0c;访问到windows上启动的web服务 二、内网穿透的环境准备 公网服务器、windows11的电脑、frp软件(需要准备两个软件&#xff0c;一个是安装到公网服务器上的&#xff0c;一个是安装到windows上的) frp下载地址下载版本 1.此版本(老版…...

Solidity智能合约事件(event)

文章目录 Solidity智能合约事件(event)什么是event事件event有什么作用日志内容位于区块链的什么地方&#xff1f;【重要】以太坊交易获取如何在 Solidity 中使用事件&#xff1f;参考 Solidity智能合约事件(event) 什么是event EVM有一个日志功能&#xff0c;用于将数据“写…...

第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语言的编译流程包括&#xff1a; 预编译&#xff1a;将.c 中的头文件展开、宏展开&#xff0c;生成的文件是.i 文件。gcc指令&#xff1a;gcc -E file.c -o file.i 编译&#xff1a;将预处理之后的.i 文件生成 .s 汇编文件。gcc指令&#xff1a;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&#xff0c;这次拿到了一个 不得不说MAC度过适应期后用起来很舒服&#xff0c;续航长&#xff0c;触控板舒服&#xff0c;轻薄无比 我前期过度的时候记录的一部分快速指南&#xff0c;掌握如下一些电脑常识 可以做到正常使用了 基本操作 在 Mac 上使用桌…...

Go TOKEN机制与跨域处理方式

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…...

JavaScript 的运行

语法分析预编译解释执行 1.语法分析 语法分析是 JavaScript 引擎处理代码的第一步。 在这个阶段&#xff0c;引擎将源代码字符串分解成一个个的词素&#xff08;token&#xff09;&#xff0c;这些词素是语言中有意义的最小单元&#xff0c;如关键字、变量名、操作符等。 语…...

园区地图导航系统:技术原理、部署方案与智能化应用解析

随着智能化时代的到来&#xff0c;园区管理面临诸多挑战。维小帮园区地图导航系统&#xff0c;采用前沿技术&#xff0c;为园区提供全面的导航解决方案&#xff0c;极大提升了园区管理效率和用户体验。 一、园区地图导航系统的功能特点 维小帮园区地图导航系统&#xff0c;以其…...

【数据结构】第十六弹---C语言实现希尔排序

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】 目录 1、希尔排序( 缩小增量排序 ) 1.1、预排序实现 1.2、希尔排序代码实现 1.3、代码测试 1.4、时空复杂度分析 1.5、性能比较 总结 上一弹我们…...

用Python向Word文档添加页眉和页脚

用Python向Word文档添加页眉和页脚 添加页眉和页脚效果代码 添加页眉和页脚 在本文中&#xff0c;我们将用python向文档中添加页眉和页脚。 效果 添加前的文档&#xff1a; 添加页眉和页脚后&#xff1a; 代码 from docx import Documentdef add_header_footer(doc_path…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生&#xff0c;小白用户&#xff0c;想学习知识的 有点基础&#xff0c;想要通过项…...