基于flask的网站如何使用https加密通信-问题记录

news2024/11/26 17:33:54

文章目录

  • 项目场景:
  • 问题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             = utf8only
      
      distinguished_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 证书

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

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

相关文章

BUUCTF---[MRCTF2020]你能看懂音符吗

1、下载附件&#xff0c;是一个压缩包&#xff0c;解压&#xff0c;发现解压失败 2、用winhex分析文件&#xff0c;发现文件头不对 3、将文件头改为&#xff1a;52617221&#xff0c;保存 4、解压得到word 5、在文档发现下面内容 6、根据题目的描述&#xff0c;将音乐字符解码…

Docker部署MaxKB 知识库(提高问答命中率)

前言 上一篇文章简单的介绍了下MaxKB&#xff0c;这一篇文章就讲如何部署MaxKB。 MaxKB实现逻辑也比较简单&#xff0c;如下图。 安装 修改Docker镜像源 由于不可抗力&#xff0c;部分源已经无法使用&#xff0c;需要修改以下的源地址来拉取镜像。如果是linux&#xff0c;…

深度学习(PyTorch)批注理解,建议边学可以边看这个笔记

前言 动手学习深度学习&#xff0c;内容丰富&#xff0c;但是对于初学者有很多晦涩难懂的地方&#xff0c;我将日常更新这篇文章以截图的形式&#xff0c;每天高强度学习四五个小时&#xff0c;精力缺乏&#xff0c;我认为&#xff0c;如果想学习这个深度学习&#xff0c;你需…

人工智能GPU互联技术分析,芯片巨头UALink向英伟达NVLink开战

芯片巨头组团&#xff0c;向英伟达NVLink开战 八大科技巨头——AMD、博通、思科、Google、惠普企业、英特尔、Meta及微软——联合推出UALink&#xff08;Ultra Accelerator Link&#xff09;技术&#xff0c;为人工智能数据中心网络设定全新互联标准。此举旨在打破Nvidia的市场…

LoginGUI.java

LoginGUI.java 完成效果如下图&#xff1a; CODE Summary: This code sets up a login GUI using Swing. It defines a LoginGUI class extending JFrame. The constructor initializes the GUI components and sets up event listeners. The event_login method handles…

TCP三次握手的过程

一、什么是TCP TCP是面向连接的、可靠的、基于字节流的传输层通信协议。 二、TCP的头部格式 序列号:在建立连接时由计算机生成的随机数作为其初始值&#xff0c;通过SYN包传给接收端主机&#xff0c;每发送一次数据&#xff0c;就「累加」一次该「数据字节数」的大小。用来解…

分数计算 初级题目

今天继续更题。今天的题目是《第五单元 分数的加减法》初级题目。 定位&#xff1a;题目较为初级&#xff0c;适合预习 参考答案&#xff1a;CACCADACAABACBBCDBCB

shell编程基础(第18篇:更多的文件操作命令介绍)

前言 对于文件来说&#xff0c;除了它的文件内容之外&#xff0c;就是对其文件本身的操作&#xff0c;比如我们想要重命名文件、移动文件、复制文件、已经获取文件所在目录&#xff0c;文件名等操作&#xff0c;今天一起学习更多的文件操作相关的命令 basename 用于获取文件名…

2024年【N2观光车和观光列车司机】考试技巧及N2观光车和观光列车司机模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 N2观光车和观光列车司机考试技巧参考答案及N2观光车和观光列车司机考试试题解析是安全生产模拟考试一点通题库老师及N2观光车和观光列车司机操作证已考过的学员汇总&#xff0c;相对有效帮助N2观光车和观光列车司机模…

第12章.STM32标准库简介

目录 0. 《STM32单片机自学教程》专栏 12.1 CMSIS 标准 12.2 STM32标准库文件结构 12.2.1 主结构 12.2.2 Libraries固件库文件 CMSIS文件夹 1.core_cm3.c&core_cm3.h 2.startup启动文件 3.Stm32f10x.h 4.system_stm32f10x.c&system_stm32f10…

微前端乾坤方案

微前端乾坤方案 了解乾坤 官方文档 介绍 qiankun 是一个基于 single-spa 的微前端实现库&#xff0c;旨在帮助大家能更简单、无痛的构建一个生产可用微前端架构系统。 qiankun 的核心设计理念 &#x1f944; 简单 由于主应用微应用都能做到技术栈无关&#xff0c;qiankun 对…

乐鑫ESP32相关资料整理

乐鑫科技 Espressif 介绍 乐鑫科技 Espressif AIoT 领域软硬件产品的研发与设计&#xff0c;专注于研发高集成、低功耗、性能卓越、安全稳定、高性价比的无线通信 SoC&#xff0c;现已发布 ESP8266、ESP32、ESP32-S、ESP32-C 和 ESP32-H 系列芯片、模组和开发板。 Espressif Sy…

如何训练自己的大型语言模型?

简介 大型语言模型&#xff0c;如OpenAI的GPT-4或Google的PaLM&#xff0c;已经席卷了人工智能领域。然而&#xff0c;大多数公司目前没有能力训练这些模型&#xff0c;并且完全依赖于只有少数几家大型科技公司提供技术支持。 在Replit&#xff0c;我们投入了大量资源来建立从…

【Tkinter界面】Canvas 图形绘制(03/5)

文章目录 一、说明二、画布和画布对象2.1 画布坐标系2.2 鼠标点中画布位置2.3 画布对象显示的顺序2.4 指定画布对象 三、你应该知道的画布对象操作3.1 什么是Tag3.2 操作Tag的函数 https://www.cnblogs.com/rainbow-tan/p/14852553.html 一、说明 Canvas&#xff08;画布&…

vue 安装依赖报错

解决方法&#xff1a; npm install --legacy-peer-deps 然后再运行项目即可。

springboot与flowable(9):候选人组

act_id_xxx相关表存储了所有用户和组的数据。 一、维护用户信息 Autowiredprivate IdentityService identityService;/*** 维护用户*/Testvoid createUser() {User user identityService.newUser("zhangsan");user.setEmail("zhangsanqq.com");user.setF…

探索互联网寻址机制 | 揭秘互联网技术的核心,解析网络寻址

揭秘互联网技术的核心&#xff0c;解析网络寻址题 前提介绍局域网地址IP地址的分配方式动态IP分配机制内部网&#xff08;intranet&#xff09;ICANN负责IP分配DHCP协议获取IP地址 域名系统域名是什么域名工作方式hosts文件存储域名映射关系DNS分布式数据库DNS域名解析 Java进行…

探索交互的本质:从指令到界面的演进与Linux基础指令的深入剖析

目录 1.指令 vs 界面//选读 1.1交互的需求 满足需求的第一阶段-指令 满足需求的第二阶段-界面 1.2 指令 和 界面交互 区别 2.操作系统介绍 2.1 举例说明 驱动软件层 2.2 为什么要有操作系统&#xff1f; 0x03 为什么要进行指令操作&#xff1f; 3.Linux基本指令 l…

数据防泄漏的六个步骤|数据防泄漏软件有哪些

在当前复杂多变的网络安全环境下&#xff0c;数据防泄漏软件成为了企业信息安全架构中不可或缺的一环。下面以安企神软件为例&#xff0c;告诉你怎么防止数据泄露&#xff0c;以及好用的防泄露软件。 1. 安企神软件 安企神软件是当前市场上备受推崇的企业级数据防泄漏解决方案…

关于反弹shell的学习

今天学习反弹shell&#xff0c;在最近做的ctf题里面越来越多的反弹shell的操作&#xff0c;所以觉得要好好研究一下&#xff0c;毕竟是一种比较常用的操作 什么是反弹shell以及原理 反弹Shell&#xff08;也称为反向Shell&#xff09;是一种技术&#xff0c;通常用于远程访问和…