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

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)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • docker容器与宿主机时间同步
  • etcd节点通信的协议和端口
  • 电脑屏幕录制软件,分享4款(2024最新)
  • gbase8s自动同步数据及加入集群的脚本
  • 案例实践 | 基于长安链的福建省气象综合治理区块链平台
  • Android11 framework 禁止三方应用通过广播开机自启动-独立方案
  • 【LeetCode】71.简化路径
  • 九-2、Rocky Linux软件包管理与安装 学习笔记
  • CTF-pwn-虚拟化-vmmware 前置
  • Study--Oracle-07-ASM相关参数(三)
  • 钉钉 ai卡片 stream模式联调
  • 三星Unpacked发布会即将举行:有新款折叠屏手机,还有智能戒指
  • 3W单声道关断模式音频功率放大器AD4150B
  • 如何通过pm2以cluster模式多进程部署next.js(包括docker下的部署)
  • springboot+vue+mybatis高校宿舍管理系统+PPT+论文+讲解+售后
  • [PHP内核探索]PHP中的哈希表
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • Nacos系列:Nacos的Java SDK使用
  • php中curl和soap方式请求服务超时问题
  • spring + angular 实现导出excel
  • 百度地图API标注+时间轴组件
  • 给github项目添加CI badge
  • 理清楚Vue的结构
  • 七牛云假注销小指南
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 想写好前端,先练好内功
  • 正则表达式
  • HanLP分词命名实体提取详解
  • 扩展资源服务器解决oauth2 性能瓶颈
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • (6)添加vue-cookie
  • (C)一些题4
  • (js)循环条件满足时终止循环
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (初研) Sentence-embedding fine-tune notebook
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (转)负载均衡,回话保持,cookie
  • ***测试-HTTP方法
  • ***原理与防范
  • .htaccess 强制https 单独排除某个目录
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .NET 反射的使用
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • @Transaction注解失效的几种场景(附有示例代码)
  • @vue/cli 3.x+引入jQuery
  • [ 2222 ]http://e.eqxiu.com/s/wJMf15Ku
  • []C/C++读取串口接收到的数据程序
  • [20170713] 无法访问SQL Server
  • [2544]最短路 (两种算法)(HDU)
  • [Android Pro] AndroidX重构和映射