golang https server如何设计方便抓包定位且安全

代码
测试

用go写后端https服务时,需要定位https包中的内容是否符合预期。

有涉猎的朋友应该了解过https有一种keylog技术,它允许在HTTPS连接中捕获和记录SSL或TLS会话密钥,以便于调试和分析加密流量。

本文将的就是通过可控制开启和关闭的keylog功能,提供安全便捷的调试方法。

代码
服务端代码如下

package main

 import ("crypto/tls""github.com/gin-gonic/gin""hbp_common/Base""io""log""net/http""os""path/filepath")var tlsConfig *tls.Configvar keylogpath stringconst (ApiCertPath = "/root/testssl/cert.pem"ApikeyPath  = "/root/testssl/key.pem")func main() {route := gin.Default()​route.GET("/hello", func(c *gin.Context) {c.JSON(http.StatusOK, gin.H{"result": "word"})})ListenAndSeverTls(route)}func SetEnableKeyLog(ctx *gin.Context) {enable := ctx.Param("enable")if enable == "enable" {var err errortlsConfig.KeyLogWriter, err = KeyLogWrite(keylogpath)if err != nil {ctx.AbortWithStatus(http.StatusForbidden)return}} else if enable == "disable" {tlsConfig.KeyLogWriter = nilerr := os.RemoveAll(keylogpath)if err != nil {ctx.AbortWithStatus(http.StatusForbidden)return}} else {ctx.AbortWithStatus(http.StatusBadRequest)return}ctx.Status(http.StatusOK)}func KeyLogWrite(path string) (io.Writer, error) {keyLogFile, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666)if err != nil {log.Fatal(err.Error())}return keyLogFile, err}func ListenAndSeverTls(route *gin.Engine) {defer Base.SafePanic()keylogpath = filepath.Dir(ApiCertPath) + "/keylog"// 加载证书和密钥cert, err := tls.LoadX509KeyPair(ApiCertPath, ApikeyPath)if err != nil {log.Panic("ListenAndSeverTls failed! LoadX509KeyPair err:[%s]", err)}// 配置TLStlsConfig = &tls.Config{KeyLogWriter: nil}tlsConfig.Certificates = []tls.Certificate{cert}​listener, err := tls.Listen("tcp", ":24443", tlsConfig)if err != nil {log.Panic("ListenAndSeverTls failed! ListenTLS err:[%s]", err)}server := http.Server{Handler: route, Addr: ":24443", TLSConfig: tlsConfig}//注册keylog记录使能接口//PUT https://localhost:8443/debug/keylog/enable 使能tls keylog//PUT https://localhost:8443/debug/keylog/disable 失能tls keylogroute.PUT("/debug/keylog/:enable", SetEnableKeyLog)​err = server.Serve(listener)if err != nil {log.Panic("ListenAndSeverTls failed! Serve err:[%s]", err)}}

通过 //PUT https://localhost:8443/debug/keylog/enable 使能tls keylog //PUT https://localhost:8443/debug/keylog/disable 失能tls keylog

可以开启和关闭该功能,可以做到不使用使防止keylog泄露。在开启和关闭操作时可以再加上鉴权校验等操作使方法更安全。

测试

请添加图片描述

可以看到,前面收到了客户端的hello,但是我没有使能,所以没有keylog生成。
请添加图片描述
开启后便有了keylog

我在此抓了包
请添加图片描述
目前是加密的

通过ctrl+shift+p打开首选项窗口

找到Protocols中的TLS,将刚才生成的keylog路径设置到图中位置
请添加图片描述

点击ok,就可以看到https明文了
请添加图片描述
请添加图片描述
请添加图片描述

disable后会删除keylog文件,确保keylog的安全
请添加图片描述

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

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

相关文章

CPU 混合推理,非常见大模型量化方案:“二三五六” 位量化

本篇文章聊聊网上聊的比较少的具体量化操作,非常见整型位数的量化,来自让各种开源模型能够在 CPU 环境、CPU & GPU 环境混合推理的技术方案:llama.cpp 。 写在前面 接下来,有计划分享一些关于各种开源模型的实践内容。为了能…

安装ThingBox Eclipse Plugin

1. ChatGPT问 The latest version of the ThingBox Eclipse Plugin requires Eclipse IDE 2021-06 or later. 2. PTC官网下载 MED-61378-CD-092_F000_Eclipse-Plugin-9-0-1.zip文件, 和 MED-61098-CD-085_F000_ThingWorx-Extension-SDK-8-5-0(需要账号&#xff09…

虚拟化逻辑架构:KVM虚拟机通过OVS端口组实现网络连接

目录 一、实验 1.CentOS 7 安装 OpenVSwitch(构建RPM安装包) 2.KVM虚拟机通过OVS端口组实现网络连接 二、问题 1.安装openvswitch-2.5.10报错 2.virt-install未找到命令 3.如何删除自定义网络 一、实验 1.CentOS 7 安装 OpenVSwitch(构建RPM安装包&#xff…

创建一个有阴影的threejs三维几何体

import * as THREE from "three" import { OrbitControls } from three/examples/jsm/controls/OrbitControlsconst width window.innerWidth; const height window.innerHeight;//创建场景 const scene new THREE.Scene(); scene.background new THREE.Color(#6…

LinuxBasicsForHackers笔记 --Python 脚本基础

添加Python模块 Python 有一个专门用于安装和管理 Python 包的包管理器,称为 pip(Pip Installs Packages)。由于我们在这里使用 Python 3,因此您将需要 Python 3 的 pip 来下载和安装软件包。默认情况下应包含 Pip,但…

vue前端访问Django channels WebSocket失败

现象 前端报错:SSH.vue:51 WebSocket connection to ‘ws://127.0.0.1:8000/server/terminal/120.59.88.26/22/1/’ failed: 后端报错:Not Found: /server/terminal/120.79.83.26/22/1/ 原因 django的版本与channels的版本不匹配(django…

关于个人职业选择

职业选择,一直是个老生常谈的话题。这并不是一个容易做的决定。 让我们来看看AI怎么说。 首先是方向性的回答: 然后是一些具体的回答 我个人比较倾向于深耕网络安全。这是一个很有趣也是一个持续发展着的领域。 不知道关于这个事情你怎么看&#xff0…

在线学习平台-课程分页、用户管理、教师查询

在线学习平台------手把手教程👈 用户管理 添加功能增强 新增属性 若依里的用户模块(SysUser)是没有课程这一属性的,要实现我们自己的课程分页查询功能 这个位置传入的实体类SysUser要加上classId,记得加上get、set方法 更改sql语句 ctrl 鼠标左键不断点进去…

DS二叉排序树之删除

Description 给出一个数据序列,建立二叉排序树,并实现删除功能 对二叉排序树进行中序遍历,可以得到有序的数据序列 Input 第一行输入t,表示有t个数据序列 第二行输入n,表示首个序列包含n个数据 第三行输入n个数据…

蓝桥杯周赛 第 1 场 强者挑战赛 6. 小球碰撞【算法赛】(思维题/最长上升子序列LIS)

题目 https://www.lanqiao.cn/problems/9494/learning/?contest_id153 思路来源 Aging代码 题解 二分时间t&#xff0c;第i个小球对应一个起点pi、终点pit*vi的区间&#xff0c;问题转化为&#xff0c; 选最多的区间&#xff0c;使得不存在区间包含&#xff08;即li<l…

微信小程序过滤器之计算当前时间差

微信小程序过滤器之计算当前时间差 前言一、wxs简介二、使用步骤1.定义2.使用 前言 最近遇到了一个需求&#xff0c;将小程序里面的具体时间2023-12-11 09:41:06转为当前时间差10小时前&#xff0c;这块可以使用js逻辑函数对数据进行处理&#xff0c;但这里我们采用微信小程序…

Error: Failed to resolve vue/compiler-sfc——vite项目启动报错——npm run serve

运行项目时&#xff0c;报错如下&#xff1a; Error: Failed to resolve vue/compiler-sfc 根据报错信息的提示&#xff1a;vue的版本必须大于3.2.25&#xff0c;经过查看package.json文件&#xff0c;可以看到vue的版本为3.2.36&#xff0c;是满足条件的。 因此考虑缓存问题&…

【OPNEGIS】Geoserver原地升级jetty,解决Apache HTTP/2拒绝服务漏洞 (CVE-2023-44487)

Geoserver是我们常用的地图服务器&#xff0c;在开源系统中的应用比较广泛。在实际环境中&#xff0c;我们可能会选用官方的二进制安装包进行部署&#xff0c;这样只要服务器上有java环境就可以运行&#xff0c;方便在现场进行部署。 1.问题来源 这次由于甲方一月一次的漏洞扫…

智能优化算法应用:基于阴阳对算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于阴阳对算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于阴阳对算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.阴阳对算法4.实验参数设定5.算法结果6.参考文…

Java - Mybatis的缓存机制、集成SpringBoot后缓存相关问题

mybaits提供一级缓存&#xff0c;和二级缓存 一级缓存&#xff08;默认开启&#xff09; 一级缓存是SqlSession级别的缓存。在操作数据库时需要构造 sqlSession对象&#xff0c;在对象中有一个(内存区域)数据结构&#xff08;HashMap&#xff09;用于存储缓存数据。不同的sqlSe…

STM32F407-14.3.1-01 时基单元

时基单元 可编程高级控制定时器的主要模块是一个 16 位计数器及其相关的自动重载寄存器。计数器可递增计数、递减计数或交替进行递增和递减计数。计数器的时钟可通过预分频器进行分频。 计数器、自动重载寄存器和预分频器寄存器可通过软件进行读写。即使在计数器运行时也可执行…

Python:核心知识点整理大全14-笔记

目录 ​编辑 7.2.2 让用户选择何时退出 parrot.py 7.2.3 使用标志 7.2.4 使用 break 退出循环 cities.py 7.2.5 在循环中使用 continue counting.py 7.2.6 避免无限循环 counting.py 7.3 使用 while 循环来处理列表和字典 7.3.1 在列表之间移动元素 confirmed_user…

数字图像处理(实践篇)二十二 使用opencv进行人脸、眼睛、嘴的检测

目录 1 xml文件 2 涉及的函数 3 实践 使用opencv进行人脸、眼睛、嘴的检测。 1 xml文件 方法① 下载 地址&#xff1a;https://github.com/opencv/opencv/tree/master/data/haarcascades 点击haarcascade_frontalface_default.xml文件 对着Raw右键&#xff0c;选择“链接…

【JVM从入门到实战】(二)字节码文件的组成

一、Java虚拟机的组成 二、字节码文件的组成 字节码文件的组成 – 应用场景 字节码文件的组成部分-Magic魔数 什么是魔数&#xff1f; Java字节码文件中的魔数 文件是无法通过文件扩展名来确定文件类型的&#xff0c;文件扩展名可以随意修改&#xff0c;不影响文件的内容。…

UE引擎 LandscapeGrass 实现机制分析(UE5.2)

前言 随着电脑和手机硬件性能越来越高&#xff0c;游戏越来越追求大世界&#xff0c;而大世界非常核心的一环是植被&#xff0c;目前UE5引擎提供给植被生成的主流两种方式为 手刷植被和LandscapeGrass(WeightMap程序化植被)。当然UE5.3推出新一代PCGFramework 节点程序化生成框…