Go语言中获取tls中的KeyLogFile,用于dubug

devtools/2024/9/22 15:45:28/

文章目录

    • 获取KeyLogFile
    • 示例代码:
      • 1. client
      • 2. client
      • 3. 效果

获取KeyLogFile

tls.config自带了接口,所以配置的时候只需要打开就行,以客户端为例
keylogfile 是一个 io.Writer 开了这个就自动使用了

keyLogFile, _ := os.OpenFile(keyLogFilePath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600)// 2. 配置tls 打开了KeyLogWriter
tlsConfig := &tls.Config{InsecureSkipVerify: true,KeyLogWriter:       keyLogFile,
}

示例代码:

1. client

package mainimport ("crypto/tls""fmt""log""net""os"
)const (HOST           = "localhost"PORT           = "8443"KEYLOGFILEPATH = "E:\\Martin_Code\\Go\\src\\lesson-03-tls\\02-myTls\\keylogfile-clent.txt"
)func main() {if err := tlsWithKeyLog(HOST, KEYLOGFILEPATH); err != nil {log.Fatalf("tlsWithKeyLog error: %s \n", err)os.Exit(1)}}func tlsWithKeyLog(url, keyLogFilePath string) error {// 1. 创建一个文件 已有则覆盖了keyLogFile, _ := os.OpenFile(keyLogFilePath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600)fmt.Fprintf(keyLogFile, "# SSL/TLS secrets log file, generated by go\n")// 2. 配置tls 打开了KeyLogWritertlsConfig := &tls.Config{InsecureSkipVerify: true,KeyLogWriter:       keyLogFile,}// 建立tls连接conn, err := tls.Dial("tcp", net.JoinHostPort(HOST, PORT), tlsConfig)if err != nil {log.Fatalf("客户端Dial()失败:%s", err)}defer conn.Close()conn.Write([]byte("Hello world"))return nil
}

2. client

package mainimport ("crypto/tls""fmt""io""log""net""os"
)const (CERTFILEPATH   = "E:\\Martin_Code\\Go\\src\\lesson-03-tls\\02-myTls\\server.crt"KEYFILEPATH    = "E:\\Martin_Code\\Go\\src\\lesson-03-tls\\02-myTls\\server.key"KEYLOGFILEPATH = "E:\\Martin_Code\\Go\\src\\lesson-03-tls\\02-myTls\\keylogfile-server.txt"
)func handleConn(conn net.Conn) {log.Printf("服务器收到连接:%s", conn.RemoteAddr())defer conn.Close()conn.Write([]byte("Hello, 这里是配置了TLS的服务器!\n"))for {buf := make([]byte, 1024)n, err := conn.Read(buf)if err != nil {if err == io.EOF {log.Println("客户端关闭连接")} else {log.Printf("服务器读取数据失败:%s", err)}return}fmt.Printf("服务器收到数据:%s\n", string(buf[:n]))}
}func main() {// 1. 服务器 加载证书和私钥cert, err := tls.LoadX509KeyPair(CERTFILEPATH, KEYFILEPATH)if err != nil {log.Fatalf("服务器加载证书失败:%s", err)}log.Println("服务器加载证书成功!")// 1.1 设置keylog文件keyLogFile, _ := os.OpenFile(KEYLOGFILEPATH, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600)fmt.Fprintf(keyLogFile, "# SSL/TLS secrets log file, generated by go\n")// 2. 创建TLS配置,并指定证书和私钥config := &tls.Config{Certificates: []tls.Certificate{cert},KeyLogWriter: keyLogFile,}log.Println("服务器TLS配置创建成功!")// 3. 监听listen, err := tls.Listen("tcp", ":8443", config)if err != nil {log.Fatalf("服务器监听失败: %s", err)}log.Println("服务器监听成功!")defer listen.Close()// 4. 开启Acceptfor {conn, err := listen.Accept()if err != nil {log.Printf("服务器Accept()失败:%s", err)continue}// 5. 处理连接go handleConn(conn)}
}

3. 效果

在这里插入图片描述


http://www.ppmy.cn/devtools/88353.html

相关文章

Java 面试常见问题之——抽象类和接口的区别

Java 面试常见问题之——抽象类和接口的区别 Java 中抽象类和接口有以下一些区别: 1. 定义方式: 抽象类使用 abstract 关键字修饰。接口使用 interface 关键字定义。 2. 继承/实现: 类只能继承一个抽象类(单继承)…

Django函数视图和类视图

函数视图 1.全局环境的urls.py引入映入应用的urls,避免后期开发路由过多而导致杂乱 from django.contrib import admin from django.urls import path, includeurlpatterns [path(account/, include(account.urls)),#使用include函数引入,表示account…

鸿蒙系统开发【加解密】安全

加解密 介绍 本示例使用cryptoFramework接口的Cipher对象相关方法实现了字符串加解密算法,包括RSA加密算法与AES加密算法。 RSA加密算法:RSA公开密钥密码体制是一种使用不同的加密密钥与解密密钥,由已知加密密钥推导出解密密钥在计算上是不…

设计模式 策略模式(Strategy Pattern) C++表达

设计模式 策略模式(Strategy Pattern) C表达 flyfish 策略模式(Strategy Pattern)是一种行为设计模式,它的核心思想是将一系列相关的算法或行为封装到独立的策略类中,并使得这些策略可以相互替换。主要用…

PHP高校教材管理系统-计算机毕业设计源码29810

目 录 摘要 1 绪论 1.1 研究背景 1.2国内外研究现状 1.3系统开发的目标意义 1.4论文结构与章节安排 2 高校教材管理系统系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 操作可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功…

Vue3多语言实现

1.首先安装i18n npm install vue-i18n 2.在项目下创建lang目录并创建en.ts,i18n1.ts,zh.ts en.ts export default {message: {home: home,appTitle:aa 3D Smart Measure}, Menus: {Measuer: Measure,},GlueMeasure: {Title: Camera 3D Glue Measure,}} zh.ts export …

pygame制作游戏第一天

pygame制作第一天 截个图 首先还是黑屏哈。后面找时间慢慢做地图跟其他角色,还有攻击方式等。 这里先做了一个“炫酷”的雨云召唤技能。 人物可以移动,g键召唤持续10秒的跟随目标的雨云。角色会被雨滴攻击。 思路很重要,不然数据传递就乱了…

【环境部署】

项目 环境部署混合启动前端项目打包(引入多模块代码)各子模块下的图片资源链接到项目固定地址 环境部署 系统开发过程中部署问题,使用mklink可以创建目录或文件的符号链接或硬链接,其中目录联接(使用mklink /J命令&am…