https改造-python https 改造

文章目录

  • 前言
    • https改造-python https 改造
      • 1.1. https 配置信任库
      • 2. 客户端带证书https发送,、服务端关闭主机、ip验证

前言

  如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。
  而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!


https改造-python https 改造

这里说一下要改造的内容:
1、https 配置信任库;
2、客户端带证书https发送,、服务端关闭主机、ip验证;

代码结构,下图红框处:
在这里插入图片描述

1.1. https 配置信任库

SslConfig.py:

import ssldef _addSsl(cert, key, hundle):context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)context.load_cert_chain(certfile=cert, keyfile=key)context.load_verify_locations(cafile=hundle)context.verify_mode = ssl.CERT_REQUIRED  # 表示需要进行客户端认证。context.check_hostname = False  # 禁用主机名验证return context
import configparser
import logging
import pathlib
from common.SslConfig import _addSslfrom flask import Flaskapp = Flask(__name__)
# SSL 配置
current_dir = pathlib.Path(__file__).parent
cert = current_dir / 'ssl' / 'psbc_crt.pem'
key = current_dir / 'ssl' / 'psbc_key.pem'
bundle = current_dir / 'ssl' / 'psbc_full.pem'
context = _addSsl(cert, key, bundle)@app.route('/data')
def data():return 'hello world'if __name__ == '__main__':app.run(host='0.0.0.0', port=8007, ssl_context=context)

测试:
访问:
https://127.0.0.1:8007/data
在这里插入图片描述
在这里插入图片描述

2. 客户端带证书https发送,、服务端关闭主机、ip验证

SslConfig.py:

import ssl
import requests
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.ssl_ import create_urllib3_context# SSL 配置class SSLAdapter(HTTPAdapter):def __init__(self, cert=None, key=None, bundle=None, **kwargs):self.cert = certself.key = keyself.bundle = bundlesuper().__init__(**kwargs)def init_poolmanager(self, *args, **kwargs):context = create_urllib3_context()if self.cert and self.key:context.load_cert_chain(certfile=self.cert, keyfile=self.key)if self.bundle:context.load_verify_locations(cafile=self.bundle)context.check_hostname = False  # 不检查主机名context.verify_mode = ssl.CERT_NONE  # 不验证证书kwargs['ssl_context'] = contextreturn super().init_poolmanager(*args, **kwargs)def _addSsl(cert, key, hundle):context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)context.load_cert_chain(certfile=cert, keyfile=key)context.load_verify_locations(cafile=hundle)context.verify_mode = ssl.CERT_REQUIRED  # 表示需要进行客户端认证。context.check_hostname = False  # 禁用主机名验证return contextdef _ssl_session(cert, key, hundle):session = requests.Session()adapter = SSLAdapter(cert=cert, key=key, bundle=hundle)session.mount('https://', adapter)session.verify = False  # 禁用证书验证return session

LogConfig.py

import logging
from logging import handlersdef _logging(log, f_name, backup_count, level_tag):# 日志格式化 and 日志切割配置level = logging.DEBUGif level_tag == 'INFO':level = logging.INFOdatefmt = '[%Y-%m-%d %H:%M:%S]'format = '%(asctime)s - [%(levelname)s] - %(filename)s [line:%(lineno)d] - %(message)s'format_str = logging.Formatter(format, datefmt)# File handlerth = handlers.TimedRotatingFileHandler(filename=f_name,when='D',interval=1,backupCount=backup_count,encoding='utf-8')th.setFormatter(format_str)th.setLevel(level)log.addHandler(th)# Console handlerch = logging.StreamHandler()ch.setFormatter(format_str)ch.setLevel(level)log.addHandler(ch)log.setLevel(level)return log

httpsDemo.py

import configparser
import logging
import pathlib
from common.LogConfig import _logging
from common.SslConfig import _addSsl,_ssl_sessionimport requests
from flask import Flaskapp = Flask(__name__)
current_dir = pathlib.Path(__file__).parent
config_file = current_dir / 'config' / 'httpsDemo.ini'
config = configparser.ConfigParser()
with open(config_file, 'r', encoding='utf-8') as f:config.read_file(f)log_file = current_dir / config['logging']['log_file']
log_level = config['logging'].get('log_level', 'INFO').upper()
log_back_up_days = config['logging'].getint('log_back_up_days', 5)  # 默认保留5个文件# 初始化日志配置
log_file.parent.mkdir(parents=True, exist_ok=True)
log = logging.getLogger(__name__)
logger = _logging(log, log_file, log_back_up_days, log_level)
https_flag = config['params'].getint('https_flag', 0)# SSL 配置
cert = current_dir / 'ssl' / 'psbc_crt.pem'
key = current_dir / 'ssl' / 'psbc_key.pem'
bundle = current_dir / 'ssl' / 'psbc_full.pem'
context = _addSsl(cert, key, bundle)
session = _ssl_session(cert, key, bundle)@app.route('/data')
def data():logger.info('======================== psot data hello world')return 'hello world'@app.route('/index')
def index():msg = 'error'url = 'https://127.0.0.1:8180/api/https/a'logger.info(f'======================== get:{url}')try:# 指定信任证书库response = session.get(url)msg = response.textexcept Exception as e:logger.error(e)logger.info(f'response:{msg}')return msgif __name__ == '__main__':app.run(host='0.0.0.0', port=8007, ssl_context=context)

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

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

相关文章

【项目日记(三)】梦幻笔耕-博客模块

❣博主主页: 33的博客❣ ▶️文章专栏分类:项目日记◀️ 🚚我的代码仓库: 33的代码仓库🚚 🫵🫵🫵关注我带你了解更多项目内容 目录 1.前言2.获取博客列表3.获取博客详情4.新增博客5.更新博客6.删除博客7.拦截器9.统一处…

日常开发记录分享-SQL中的partition分区功能使用

文章目录 需求来源实现思路实施SQL 语句结构内部查询(子查询)外部查询 结果 partition的升级使用解释 验证一下看看分区 分区的一些操作1. 普通查询2. 分区表上的查询优化3. 插入数据4. 删除分区中的数据5. 分区维护操作添加新的分区删除分区重组分区 6.…

银河麒麟服务器V10 SP3 安装人大金仓V009R001C001B0030

原文链接:银河麒麟服务器V10 SP3 安装人大金仓V009R001C001B0030 Hello,大家好啊,今天给大家带来一篇关于在银河麒麟服务器V10 SP3上安装人大金仓V009R001C001B0030的文章。人大金仓是国内知名的数据库管理系统,它在高性能、高可靠…

【C++】标准库:介绍string类

string 一.string类介绍二.string类的静态成员变量三.string类的常用接口1.构造函数(constructor)2.析构函数(destructor)3.运算符重载(operator)1.operator2.operator[]3.operator4.operator 4.string的四…

算法从零到精通 (一) ~ 快慢双指针

1. 前言 快慢双指针是一种常用的算法技巧,通常用于解决涉及链表或数组的问题。它的基本思想是使用两个指针,一个移动速度快(快指针),一个移动速度慢(慢指针),来解决特定的问题。这两…

Docker搭建群晖

Docker搭建群晖 本博客介绍在docker下搭建群晖 1.编辑docker-compose.yml文件 version: "3" services:dsm:container_name: dsmimage: vdsm/virtual-dsm:latestenvironment:DISK_SIZE: "16G"cap_add:- NET_ADMIN ports:- 8080:50…

c# 端口监控 Helper 以及写一个端口监控工具

c# 端口监控 Helper 以及写一个端口监控工具 介绍核心代码:工具完整编码:1、编写界面2、打开定时控件的属性设置。3、编写定时控件的 Tick 事件结果(运行效果) 介绍 由于最近做上架比较多,会经常来确保服务器的服务&a…

Flink时间和窗口

目录 时间语义 水位线(Watermarks) 并行流中的水位线 窗口 滚动窗口—Tumbling Windows 滑动窗口—Sliding Windows 会话窗口—Session Windows 全局窗口—Global Windows 例子 时间语义 如图所示,由事件生成器(Event Pr…

萤石举办2024夏季新品发布会,全力推进“2+5+N”智能家居新生态

7月24日,“智动新生,尽在掌控”2024萤石夏季新品发布会在杭州成功举办。本次发布会上,“智慧生活守护者”萤石深入挖掘应用场景,重磅发布了包括智能健康手表、智能家居AI主机、生态控制器、智家APP等多款创新性的产品及应用&#…

【JavaScript】`Map` 数据结构

文章目录 一、Map 的基本概念二、常见操作三、与对象的对比四、实际应用场景 在现代 JavaScript 中,Map 是一种非常重要且强大的数据结构。与传统的对象(Object)不同,Map 允许您使用各种类型的值作为键,不限于字符串或…

基于 HTML+ECharts 实现监控平台数据可视化大屏(含源码)

构建监控平台数据可视化大屏:基于 HTML 和 ECharts 的实现 监控平台的数据可视化对于实时掌握系统状态、快速响应问题至关重要。通过直观的数据展示,运维团队可以迅速发现异常,优化资源配置。本文将详细介绍如何利用 HTML 和 ECharts 实现一个…

关于 夜莺n9e 的简易部署

一、部署夜莺n9e 1.找一个服务器机器 #创建并进入目录 mkdir -p /data/n9e && cd /data/n9e2.准备n9e安装包 (如果存在,跳过) #下载并解压n9e wget https://download.flashcat.cloud/n9e-v6.7.3-linux-amd64.tar.gz tar -zxvf n9e-v6.7.3-linux-amd64.ta…

JL 跳转指令的理解

一般情况下,JU 和 JC 是最常见的跳转指令;但有时会用到JL 指令,JL 说起来更像是一组指令,类似C,C# 语言中的 switch case 语句,但是有个明显的不同,前者的判断条件可以是任意合理数字,后者范围…

制冷系统干燥过滤器

干燥过滤器(Drier Filter)主要是起到杂质过滤的作用。一般来说,这要根据冰箱、空调的制冷系统来确定干燥器的规格,如直径,内径,外径的规格,和内部件,如过滤碗,网布,和分子筛 为了确保…

C#测试控制台程序调用Quartz.NET的基本用法

Quartz.Net是常用的任务调用框架之一,既能在客户端程序中使用,也支持在网页程序后台调用。本文结合参考文献4中的示例代码学习其在控制台程序中的基本用法。   VS2022新建控制台项目,在Nuget包管理器中搜索并安装Quartz包,如下所…

JavaWeb笔记_JSPEL

一.JSP相关技术 1.1 JSP由来 当我们需要向页面输出大量的HTML代码的时候,我们需要通过response对象写多次来输出HTML代码 response.getWriter().write("<font>文本</font>"); 页面的展示和servlet密不可分,不利于后期代码维护,因此推出一种可以…

npm下载pnpm

一、提供node_global和node_cache的文件夹 若不存在&#xff0c;可自行新建文件夹 二、配置环境变量 配置NODE_PATH变量&#xff1a; 配置Path变量&#xff1a; 三、执行cmd指令 npm config set prefix "D:\Configure\nodejs\node_global" npm config set cache &…

公司邮箱一般是什么邮箱

公司邮箱一般是什么邮箱呢&#xff1f;公司邮箱是企业官方通信工具&#xff0c;体现专业形象&#xff0c;提高协作效率。选择时需考虑安全性、功能集成、性价比和技术支持。Zoho邮箱因简洁界面、丰富协作工具和出色安全性能受好评&#xff0c;提供多种套餐选择。 一、公司邮箱…

编写SpringBoot的自定义starter包

starter项目 先来看一下Starter的官方解释&#xff1a; Spring Boot Starter 是一种方便的依赖管理方式&#xff0c;它封装了特定功能或技术栈的所有必要依赖项和配置&#xff0c;使得开发者可以快速地将这些功能集成到Spring Boot项目中。Spring Boot官方提供了一系列的Star…

接入百度文心一言API教程

然后&#xff0c;编辑文章。点击AI识别摘要&#xff0c;然后保存即可 COREAIPOWER设置 暂时只支持经典编辑器.古腾堡编辑器等几个版本后支持.在比期间,你可以自己写点摘要 摘要内容 AL识别摘要 清空 若有收获&#xff0c;就点个赞吧 接入文心一言 现在百度文心一言&…