基于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 证书

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

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

相关文章

大模型基础——从零实现一个Transformer(3)

大模型基础——从零实现一个Transformer(1)-CSDN博客 大模型基础——从零实现一个Transformer(2)-CSDN博客 一、前言 之前两篇文章已经讲了Transformer的Embedding,Tokenizer,Attention,Position Encoding, 本文我们继续了解Transformer中剩下的其他组件. 二、归一化 2.1 L…

红队攻防渗透技术实战流程:中间件安全:JettyJenkinsWeblogicWPS

红队攻防渗透实战 1. 中间件安全1.1 中间件-Jetty-CVE&信息泄漏1.2 中间件-Jenkins-CVE&RCE执行1.2.1 cve_2017_1000353 JDK-1.8.0_291 其他版本失效1.2.2 CVE-2018-10008611.2.3 cve_2019_100300 需要用户帐号密码1.3 中间件-Weblogic-CVE&反序列化&RCE1.4 应…

使用python绘制三维曲线图

使用python绘制三维曲线图 三维曲线图定义特点 效果代码 三维曲线图 三维曲线图&#xff08;3D曲线图&#xff09;是一种用于可视化三维数据的图表&#xff0c;它展示了数据在三个维度&#xff08;X、Y、Z&#xff09;上的变化。 定义 三维曲线图通过在三维坐标系中绘制曲线…

数据结构之线性表(4)

前面我们了解到线性表中的顺序表、链表等结构&#xff0c;今天我们探讨新的一种线性表——栈。 那么我们开始栈的探讨之旅吧。 1.栈的基本概念 1.1栈&#xff08;Stack&#xff09;&#xff1a; 是只允许在一端进行插入或删除的线性表。首先栈是一种线性表&#xff0c;但限定…

sudo 用户切换

切换到centos 用户 sudo -i -u centos 解决centos sudo执行仍旧显示Permission denied 方法一&#xff08;建议&#xff09; 暂时切换到root用户 sudo -i然后执行命令即可 方法二 赋给当前用户权限&#xff1a; sudo chmod -R 777 目录路径 sudo chmod 777 文件路径.txt…

IDEA 设置主题、背景图片、背景颜色

一、设置主题 1、点击菜单 File -> Settings : 点击 Settings 菜单 2、点击 Editor -> Color Scheme -> Scheme, 小哈的 IDEA 版本号为 2022.2.3 , 官方默认提供了 4 种主题&#xff1a; Classic Light &#xff08;经典白&#xff09; ;Darcula &#xff08;暗黑主…

2.2 抽头

目录 为什么要抽头 什么是抽头 接入系数 怎么抽头 信号源端抽头 负载端抽头 例题分析 要点总结 为什么要抽头 阻抗转换&#xff0c;使信号源内阻Rs与负载电阻RL变得很大&#xff0c;分流小&#xff0c;再使用并联方式。 什么是抽头 接入系数 电容越大&#xff0c;分压越…

【RabbitMQ】异步消息及Rabbitmq安装

https://blog.csdn.net/weixin_73077810/article/details/133836287 https://www.bilibili.com/video/BV1mN4y1Z7t9/ 同步调用和异步调用 如果我们的业务需要实时得到服务提供方的响应&#xff0c;则应该选择同步通讯&#xff08;同步调用&#xff09;。 如果我们追求更高的效…

MySQL-连接查询

049-内连接之等值连接 案例&#xff1a;查询每个员工所在的部门名称&#xff0c;要求显示员工名、部门名。 select e.ename, d.dname from emp e inner join dept d on e.deptnod.deptno;注意&#xff1a;inner可以省略 select e.ename, d.dname from emp e join dept d on…

Vue49-props属性

一、当同一个组件标签被使用多次 因为data属性写的是函数形式&#xff01; 二、需求&#xff1a;老王也想用<Student>组件&#xff0c;但是需要动态把老王想要的值传进来。 2-1、使用props属性接收参数 使用props属性&#xff0c;接收的这三个参数&#xff0c;是被保存在…

vs+qt5.0 使用poppler 操作库

Poppler 是一个用来生成 PDF 的C类库&#xff0c;从xpdf 继承而来。vs编译库如下&#xff1a; vs中只需要添加依赖库即可 头文件&#xff1a;

部署LVS-DR群集...

目录 最后一台主机&#xff08;第四台&#xff09; 本地yum源安装httpd&#xff08;非必做&#xff09; 继续开始从最后一台主机开始&#xff08;第四台&#xff09; 转第二台主机 转第三台主机 回第二台 上传 转第三台主机 上传 回第二台 转第三台 转第一台主机…

试论地产需求政策的有效性边界

分析师通过对传统框架因子的分析和美日地产的回顾&#xff0c;指出收入政策将成为核心&#xff0c;测算认为地方收储面积约0.5-1.1亿平、收储资金0.8-1.9万亿元&#xff0c;70城二手房价降幅收窄至[-4.5%&#xff0c;-1.6%]。 事件&#xff1a;2024年5月17日&#xff0c;央行印…

异常封装类统一后端响应的数据格式

异常封装类 如何统一后端响应的数据格式 1. 背景 后端作为数据的处理和响应&#xff0c;如何才能和前端配合好&#xff0c;能够高效的完成任务&#xff0c;其中一个比较重要的点就是后端返回的数据格式。 没有统一的响应格式&#xff1a; // 第一种&#xff1a; {"dat…

数 组

概述 数组是一个引用类型&#xff0c;是一种容器。 数组存储多个相同数据类型的数据&#xff0c;允许自动类型转换。例如 int 类型的数组&#xff0c;可以存放 byte、short 和 int 类型的数据&#xff0c;double 类型的数组&#xff0c;可以存放 byte、short、int、long、floa…

【Apache Doris】周FAQ集锦:第 5 期

【Apache Doris】周FAQ集锦&#xff1a;第 5 期 SQL问题数据操作问题运维常见问题其它问题关于社区 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目&#xff01; 在这个栏目中&#xff0c;每周将筛选社区反馈的热门问题和话题&#xff0c;重点回答并进行深入探讨。旨在为广大用户和…

zip加密txt文件后,暴力破解时会有多个解密密码可以打开的疑问??

最近在做一个关于zip压缩文件解密的测试&#xff0c;发现通过暴力解密时&#xff0c;会有多个解密密码可以打开&#xff0c;非常疑惑&#xff0c;这里做个问题&#xff0c;希望能有大佬解惑。 1、首先在本地创建一个113449.txt的文件&#xff0c;然后右键txt文件选择压缩&…

1586. 扫地机器人

问题描述 Mike同学在为扫地机器人设计一个在矩形区域中行走的算法,Mike是这样设计的:先把机器人放在出发点 (1,1)(1,1) 点上,机器人在每个点上都会沿用如下的规则来判断下一个该去的点是哪里。规则:优先向右,如果向右不能走(比如:右侧出了矩形或者右侧扫过了)则尝试向…

为什么说Python 是胶水语言?

​ "Python 是胶水语言"这一说法是指它很擅长将不同的程序或代码库连接在一起&#xff0c;能够让来自不同编程语言或框架的组件无缝协作。Python 具有丰富的库和简单的语法&#xff0c;使得它可以轻松调用其他语言编写的程序或使用不同技术栈的模块。 ​ 以下是几个…

Linux C编译器从零开发二

自定义分词器 test.c #include <ctype.h> #include <stdarg.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <string.h>typedef enum {TK_PUNCT, // PunctuatorsTK_NUM, // Numeric literalsTK_EOF, // …