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 string?const (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.pswp.cn/news/215296.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/215296.shtml
英文地址,請注明出處:http://en.pswp.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;指的是通過網絡“云”將巨大的數據計算處理程序分解成無數個小程序…