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,一经查实,立即删除!

相关文章

单身狗(Python)

题目描述 单身狗 “单身狗”是中文对于单身人士的一种爱称。本题请你从上万人的大型派对中找出落单的客人,以便给予特殊关爱。 输入格式: 输入第一行给出一个正整数 N(≤50000),是已知夫妻/伴侣的对数;…

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…

字符串知识点

一. 1.字符占据一个字节 2.字符数组:char name[15] { W, a, n, g, L, i}; 字符串:char name[15] “Wang Li”; 二. 1.字符串:为有效长度(有效字符的个数)而不是字符数组的长度; 2.&#…

创建一个有阴影的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,但…

学习Node.js与Webpack总结

今天学习了模块化的简介,其实一个项目是由很多个模块文件组成的,它们有它们各自的功能和用途来协助这个项目的完成,这样的模块组成有很多的好处比如提高代码的复用性、还可以按需加载、还有独立的作用域,还需要搞清楚的一点就是No…

如何截取Hive数组中的前N个元素?

文章目录 1、需求描述2、使用索引3、使用posexplode()4、转换为字符串操作 1、需求描述 需求:截取任意给定数组中的前N个元素,返回截取后的子数组 假设我们有如下三种类型的Hive数组: select array(1,2,3,4) -- [1,2,3,4] selec…

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.问题来源 这次由于甲方一月一次的漏洞扫…

Mysql表的数据类型

数据类型 https://www.sjkjc.com/mysql/varchar/ MySQL 中的数据类型包括以下几个大类&#xff1a; 字符串类型 数字类型 日期和时间类型 二进制类型 地理位置数据类型 JSON 数据类型 MySQL 字符串数据类型 VARCHAR&#xff1a;纯文本字符串&#xff0c;字符串长度是可变的…

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

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

云计算、边缘计算、雾计算

目录 云计算边缘计算雾计算 云计算 云计算是基于互联网的计算模式&#xff0c;允许用户通过网络获取计算资源、存储资源、数据库等服务&#xff0c;无需了解和管理底层 云计算是分布式计算的一种&#xff0c;指的是通过网络“云”将巨大的数据计算处理程序分解成无数个小程序…