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

别再只抓包了!手把手教你用OpenSSL验证‘挑战-响应’身份鉴别的签名(附完整数据包分析)

从Hex到真相OpenSSL实战验证挑战-响应签名全流程当你面对一长串十六进制数据时是否曾感到无从下手作为安全工程师我们经常需要验证各种协议中的数字签名但大多数教程只停留在理论层面。本文将带你深入TLS握手背后的密码学世界用OpenSSL命令行工具完成一次完整的挑战-响应签名验证。1. 准备工作理解挑战-响应机制在TLS握手过程中服务器通过发送数字签名来证明其拥有私钥。这个签名是对特定数据的加密哈希值通常包括客户端随机数ClientHello.random服务端随机数ServerHello.random服务器证书验证这个签名需要三个关键步骤重建签名原文按照协议规范拼接原始数据提取公钥从服务器证书中获取验证签名的公钥执行验签使用公钥验证签名有效性注意不同TLS版本和密码套件可能使用不同的签名算法本文以常见的ECDSA为例。2. 数据提取与处理2.1 解析网络抓包数据假设我们已经通过Wireshark等工具捕获了TLS握手流量并提取出以下关键字段# 客户端随机数 f81ce4d345466f00852fd30dc0555086544391bd2bd0ca13b8b66776a0bbc2ab # 服务端随机数 5ed8968e7d19162fdc1aca131ddf438b55275de556c9994a8ff3bb871393d4cd # 服务器证书DER格式 30820221308201c6a003020102020108300a06082a811ccf55018375308187310b300906035504061302434e3110300e06035504080c074265696a696e673110300e06035504070c074265696a696e67310d300b060355040a0c04424a4341310d300b060355040b0c04424a43413116301406035504030c0d424a4341534d32544553544341311e301c06092a864886f70d010901160f737570706f727440626a63612e636e301e170d3230303531323035313231345a170d3330303332313035313231345a30818e310b300906035504061302434e3110300e06035504080c074265696a696e673110300e06035504070c074265696a696e67310d300b060355040a0c04424a4341310d300b060355040b0c04424a4341311d301b06035504030c14626a6361736d3273657276657273727031656e63311e301c06092a864886f70d010901160f737570706f727440626a63612e636e3059301306072a8648ce3d020106082a811ccf5501822d03420004a0e54d33742636210e37a36c6e0102c296813a1812d112e44864337d7a248a6865afe51abf3830971465bdcbc9b003c72e62e0c7ca6ce53cf56f265ae877c442a31a301830090603551d1304023000300b0603551d0f040403020430300a06082a811ccf5501837503490030460221009dd093c169af50fbca6061ed1b10d4394b2768d115027f64533f24080d94f20d022100cc96806594a6ad537b78991c6e673384ef415da8c0d226103dcee21327341032 # 签名值 3045022100e4795b5a947526f8e7cbd0edd571ea8749e0efd24323799346ea2c740c006c5a0220026189e51c19d20d40a82606d0ed72cb9530a189bbb94c09e4559d7d8ff3f5982.2 构建签名原文根据TLS 1.2规范签名原文的构成顺序为客户端随机数32字节服务端随机数32字节证书长度3字节证书本身使用xxd工具将十六进制转换为二进制文件# 将客户端随机数保存为文件 echo -n f81ce4d345466f00852fd30dc0555086544391bd2bd0ca13b8b66776a0bbc2ab | xxd -r -p client_random.bin # 将服务端随机数保存为文件 echo -n 5ed8968e7d19162fdc1aca131ddf438b55275de556c9994a8ff3bb871393d4cd | xxd -r -p server_random.bin # 计算证书长度并保存 echo -n 000225 | xxd -r -p cert_len.bin # 将证书保存为文件 echo -n 30820221308201c6a003020102020108300a06082a811ccf55018375308187310b300906035504061302434e3110300e06035504080c074265696a696e673110300e06035504070c074265696a696e67310d300b060355040a0c04424a4341310d300b060355040b0c04424a43413116301406035504030c0d424a4341534d32544553544341311e301c06092a864886f70d010901160f737570706f727440626a63612e636e301e170d3230303531323035313231345a170d3330303332313035313231345a30818e310b300906035504061302434e3110300e06035504080c074265696a696e673110300e06035504070c074265696a696e67310d300b060355040a0c04424a4341310d300b060355040b0c04424a4341311d301b06035504030c14626a6361736d3273657276657273727031656e63311e301c06092a864886f70d010901160f737570706f727440626a63612e636e3059301306072a8648ce3d020106082a811ccf5501822d03420004a0e54d33742636210e37a36c6e0102c296813a1812d112e44864337d7a248a6865afe51abf3830971465bdcbc9b003c72e62e0c7ca6ce53cf56f265ae877c442a31a301830090603551d1304023000300b0603551d0f040403020430300a06082a811ccf5501837503490030460221009dd093c169af50fbca6061ed1b10d4394b2768d115027f64533f24080d94f20d022100cc96806594a6ad537b78991c6e673384ef415da8c0d226103dcee21327341032 | xxd -r -p cert.der # 拼接所有文件形成签名原文 cat client_random.bin server_random.bin cert_len.bin cert.der signature_input.bin3. 证书与公钥提取3.1 解析DER格式证书使用OpenSSL查看证书信息openssl x509 -inform der -in cert.der -text -noout关键输出包括签名算法ecdsa-with-SHA256公钥信息Public Key Algorithm: id-ecPublicKey Public-Key: (256 bit) pub: 04:a0:e5:4d:33:74:26:36:21:0e:37:a3:6c:6e:01: 02:c2:96:81:3a:18:12:d1:12:e4:48:64:33:7d:7a: 24:8a:68:65:af:e5:1a:bf:38:30:97:14:65:bd:cb: c9:b0:03:c7:2e:62:e0:c7:ca:6c:e5:3c:f5:6f:26: 5a:e8:77:c4:42:a33.2 提取公钥将公钥保存为PEM格式openssl x509 -inform der -in cert.der -pubkey -noout pubkey.pem查看公钥文件内容-----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEoOVNM3QmNiEON6NsbgECwpaBOhgS 0RLkSGQzfXokimhlrUavzgwlxRlvcvJsAPHLmLgx8ps5Tz1byZa6HfEQqM -----END PUBLIC KEY-----4. 签名验证实战4.1 准备验证材料我们已经拥有签名原文signature_input.bin签名值原始十六进制公钥pubkey.pem首先将签名值保存为文件echo -n 3045022100e4795b5a947526f8e7cbd0edd571ea8749e0efd24323799346ea2c740c006c5a0220026189e51c19d20d40a82606d0ed72cb9530a189bbb94c09e4559d7d8ff3f598 | xxd -r -p signature.bin4.2 执行验签命令使用OpenSSL的dgst命令进行验证openssl dgst -sha256 -verify pubkey.pem -signature signature.bin signature_input.bin成功验证的输出应为Verified OK4.3 常见问题排查如果验证失败可能的原因包括签名原文拼接错误检查各字段顺序是否正确确认证书长度字段是否为3字节签名算法不匹配确保使用的哈希算法与证书中声明的算法一致对于ECDSA签名尝试不同的哈希算法SHA256/SHA384等证书链问题验证证书是否过期或被吊销检查中间证书是否完整5. 深入理解签名结构5.1 ECDSA签名解析ECDSA签名本身是ASN.1编码的包含两个大整数r和s。我们可以解析签名内容openssl asn1parse -inform der -in signature.bin输出示例0:d0 hl2 l 69 cons: SEQUENCE 2:d1 hl2 l 33 prim: INTEGER :E4795B5A947526F8E7CBD0EDD571EA8749E0EFD24323799346EA2C740C006C5A 37:d1 hl2 l 32 prim: INTEGER :26189E51C19D20D40A82606D0ED72CB9530A189BBB94C09E4559D7D8FF3F5985.2 手动验证步骤对于希望更深入理解的技术人员可以分步验证计算签名原文的SHA256哈希openssl dgst -sha256 -binary signature_input.bin hash.bin提取r和s值openssl asn1parse -inform der -in signature.bin -strparse 2 -noout -out r.bin openssl asn1parse -inform der -in signature.bin -strparse 37 -noout -out s.bin使用低级别EC命令验证openssl pkeyutl -verify -in hash.bin -sigfile signature.bin -pubin -inkey pubkey.pem6. 自动化脚本实现为提高效率可以创建自动化验证脚本#!/bin/bash # 输入参数 CLIENT_RANDOMf81ce4d345466f00852fd30dc0555086544391bd2bd0ca13b8b66776a0bbc2ab SERVER_RANDOM5ed8968e7d19162fdc1aca131ddf438b55275de556c9994a8ff3bb871393d4cd CERT30820221308201c6a003020102020108300a06082a811ccf55018375308187310b300906035504061302434e3110300e06035504080c074265696a696e673110300e06035504070c074265696a696e67310d300b060355040a0c04424a4341310d300b060355040b0c04424a43413116301406035504030c0d424a4341534d32544553544341311e301c06092a864886f70d010901160f737570706f727440626a63612e636e301e170d3230303531323035313231345a170d3330303332313035313231345a30818e310b300906035504061302434e3110300e06035504080c074265696a696e673110300e06035504070c074265696a696e67310d300b060355040a0c04424a4341310d300b060355040b0c04424a4341311d301b06035504030c14626a6361736d3273657276657273727031656e63311e301c06092a864886f70d010901160f737570706f727440626a63612e636e3059301306072a8648ce3d020106082a811ccf5501822d03420004a0e54d33742636210e37a36c6e0102c296813a1812d112e44864337d7a248a6865afe51abf3830971465bdcbc9b003c72e62e0c7ca6ce53cf56f265ae877c442a31a301830090603551d1304023000300b0603551d0f040403020430300a06082a811ccf5501837503490030460221009dd093c169af50fbca6061ed1b10d4394b2768d115027f64533f24080d94f20d022100cc96806594a6ad537b78991c6e673384ef415da8c0d226103dcee21327341032 SIGNATURE3045022100e4795b5a947526f8e7cbd0edd571ea8749e0efd24323799346ea2c740c006c5a0220026189e51c19d20d40a82606d0ed72cb9530a189bbb94c09e4559d7d8ff3f598 # 临时文件 TMP_DIR$(mktemp -d) trap rm -rf $TMP_DIR EXIT # 构建签名原文 echo -n $CLIENT_RANDOM | xxd -r -p $TMP_DIR/client_random.bin echo -n $SERVER_RANDOM | xxd -r -p $TMP_DIR/server_random.bin echo -n $CERT | xxd -r -p $TMP_DIR/cert.der CERT_LEN$(printf %06x $(stat -c%s $TMP_DIR/cert.der)) echo -n ${CERT_LEN:0:6} | xxd -r -p $TMP_DIR/cert_len.bin cat $TMP_DIR/client_random.bin $TMP_DIR/server_random.bin $TMP_DIR/cert_len.bin $TMP_DIR/cert.der $TMP_DIR/signature_input.bin # 提取公钥 echo -n $CERT | xxd -r -p | openssl x509 -inform der -pubkey -noout $TMP_DIR/pubkey.pem # 准备签名文件 echo -n $SIGNATURE | xxd -r -p $TMP_DIR/signature.bin # 执行验证 openssl dgst -sha256 -verify $TMP_DIR/pubkey.pem -signature $TMP_DIR/signature.bin $TMP_DIR/signature_input.bin在实际渗透测试中这种签名验证技术可以帮助确认服务器身份的真实性检测中间人攻击以及验证各种安全协议的正确实现。掌握这些底层操作不仅能加深对协议的理解还能在遇到非常规情况时快速定位问题。

相关文章:

别再只抓包了!手把手教你用OpenSSL验证‘挑战-响应’身份鉴别的签名(附完整数据包分析)

从Hex到真相:OpenSSL实战验证挑战-响应签名全流程 当你面对一长串十六进制数据时,是否曾感到无从下手?作为安全工程师,我们经常需要验证各种协议中的数字签名,但大多数教程只停留在理论层面。本文将带你深入TLS握手背后…...

YOLOv7实战:如何将它集成到车载DMS系统,并优化抽烟、打电话等行为检测?

YOLOv7车载DMS系统实战:从模型优化到多行为检测的工程化落地 坐在驾驶座上,你或许从未意识到那些看似微小的动作——抬手喝水、低头点烟、拿起手机——都可能成为致命事故的导火索。车载驾驶员监控系统(DMS)正在成为智能汽车的标配,而如何让…...

Python 3.15新调度架构实测:3步启用多解释器并行,吞吐量提升4.7倍(附可运行conf.toml模板)

更多请点击: https://intelliparadigm.com 第一章:Python 3.15多解释器协同调度架构概览 Python 3.15 引入了实验性但高度结构化的多解释器(PEP 684 增强版)协同调度框架,其核心目标是实现真正的并行执行隔离与跨解释…...

别再乱删了!Linux服务器/var/log目录下20多种日志文件详解与安全清理指南(2024版)

Linux服务器日志文件深度解析与智能清理实战指南 日志系统的核心价值与运维痛点 每次登录Linux服务器执行ls -lh /var/log时,面对数十个不断增长的日志文件,不少运维工程师都会陷入两难——放任不管可能引发磁盘爆满,盲目删除又担心破坏关键审…...

观测到接入Taotoken后大模型服务稳定性与延迟显著改善

观测接入Taotoken后大模型服务稳定性与延迟的改善 1. 原有直接调用模型源的挑战 在接入Taotoken之前,我们的应用直接调用多个大模型供应商的API。这种方式在实践过程中遇到了一些典型问题。不同供应商的API响应时间波动较大,尤其在业务高峰期&#xff…...

LOLIN S2 Pico开发板:ESP32-S2与OLED的物联网解决方案

1. LOLIN S2 Pico开发板深度解析作为一名长期使用各类嵌入式开发板的硬件开发者,当我第一次拿到LOLIN S2 Pico时,立刻被它精巧的设计所吸引。这款将ESP32-S2芯片与OLED显示屏完美结合的微型开发板,堪称物联网开发的"瑞士军刀"。它的…...

告别‘硬邦邦’的机器人:用准直驱(QDD)和齿带传动打造下一代柔顺机械臂,实战VR遥操作演示

下一代柔顺机械臂:QDD与齿带传动如何重塑人机交互体验 当机械臂第一次在汽车装配线上挥舞时,工程师们追求的是钢铁般的精确与速度。但今天,在养老院协助老人喝水的机器人、在厨房帮忙煮咖啡的机械手、或是通过VR远程为病人做检查的医疗设备&a…...

保姆级教程:在ESP32上跑通FRMN人脸识别模型(从图像对齐到ID存储全流程)

在ESP32上实现FRMN人脸识别模型的完整开发指南 人脸识别技术正快速渗透到嵌入式设备领域,而ESP32凭借其出色的性价比和丰富的生态成为首选平台之一。本文将手把手带你完成从零搭建基于FRMN模型的人脸识别系统,涵盖硬件连接、模型部署、参数调优到数据存储…...

Hearthstone-Script:炉石传说智能自动化解决方案深度解析

Hearthstone-Script:炉石传说智能自动化解决方案深度解析 【免费下载链接】Hearthstone-Script Hearthstone script(炉石传说脚本) 项目地址: https://gitcode.com/gh_mirrors/he/Hearthstone-Script 炉石传说作为全球最受欢迎的集换式…...

Python hasattr getattr setattr 使用场景

hasattr、getattr、setattr是Python中用于动态操作对象属性的三个核心内置函数:hasattr安全检查属性是否存在;getattr支持带默认值的安全读取;setattr实现字符串名的动态赋值,三者常协同用于属性代理、懒加载及通用配置管理。hasa…...

团队代码规范管控:用 OpenClaw 自动扫描代码规范问题、生成整改报告、同步到团队协作群

团队代码规范管控:利用 OpenClaw 实现自动化扫描、报告生成与团队协作同步在现代软件开发中,代码规范管控是确保项目质量、提升团队协作效率的关键环节。传统的手动代码审查方式不仅耗时耗力,还容易因人为疏忽导致规范问题遗漏,进…...

ENVI5.3保姆级教程:高分二号影像从辐射定标到融合出图的完整避坑指南

ENVI5.3高分二号影像处理全流程实战:从数据准备到融合出图的避坑手册 第一次接触高分二号影像处理时,我被各种专业术语和复杂的操作步骤搞得晕头转向。辐射定标、大气校正、正射校正、图像融合……每个环节都可能因为一个小细节导致整个流程卡壳。经过多…...

nRF Connect 事件录播功能实战:如何用‘重演’功能5分钟搞定蓝牙设备批量测试

nRF Connect事件录播功能实战:5分钟构建蓝牙设备自动化测试流水线 蓝牙设备测试工程师最头疼的莫过于重复执行相同的GATT操作序列——每天手动读取几十台设备的电量、厂商信息和版本号,不仅效率低下还容易出错。nRF Connect的录播/重演功能就像给测试流程…...

RTOS调试效率提升400%的5个冷门但致命技巧:从__NOP()插桩到Tracealyzer二进制流解析,附2024最新IDE配置清单

更多请点击: https://intelliparadigm.com 第一章:RTOS调试效率提升400%的底层逻辑与认知重构 传统RTOS调试常陷入“断点轰炸—日志海捞—现象猜测”的低效循环,根源在于将调试视为故障响应而非系统可观测性工程。真正实现400%效率跃升的关键…...

保姆级教程:用SSH+ROS搞定远程Rviz,让你的ROS小车在另一台Ubuntu上跑起来

从零构建ROS远程调试系统:SSHRviz实战指南 想象一下这样的场景:你的ROS机器人正在实验室里移动,而你却可以坐在客厅的沙发上,通过另一台电脑实时查看传感器数据并发送控制指令。这种远程调试能力不仅能提升开发效率,还…...

2026年权威解读:GEO系统贴牌服务商怎么选?性能实测TOP5服务商性价比排行

核心参数解析与全平台覆盖能力概览随着AI大模型成为信息获取的主流入口,GEO(生成式引擎优化)的重要性已不亚于传统SEO。其核心差异在于,AI搜索并非基于关键词的简单匹配,而是基于对内容语义、上下文关联性及权威性的综…...

大语言模型科学问答优化:数据工程与奖励模型实践

1. 项目背景与核心挑战去年参与某知识推理平台开发时,我们发现现有大语言模型在科学类问答中经常出现"一本正经地胡说八道"的情况。典型场景是当用户询问"为什么天空是蓝色的"时,模型会混合正确的瑞利散射原理与错误的折射解释&…...

告别CMA!用R语言做元分析,从数据导入到森林图绘制的保姆级教程(附完整代码)

从CMA到R语言:元分析全流程实战指南与代码解析 如果你曾经依赖CMA等图形界面工具进行元分析,现在正考虑转向更强大灵活的R语言,这份指南将为你提供一条平滑的过渡路径。不同于传统统计软件的点选操作,R语言通过代码驱动分析流程&a…...

ComfyUI-Impact-Pack:模块化图像增强与语义分割的技术架构解析

ComfyUI-Impact-Pack:模块化图像增强与语义分割的技术架构解析 【免费下载链接】ComfyUI-Impact-Pack Custom nodes pack for ComfyUI This custom node helps to conveniently enhance images through Detector, Detailer, Upscaler, Pipe, and more. 项目地址: …...

产品需求文档(PRD)撰写工艺:从概念到实践的全流程指南

1. 项目概述:为什么我们需要一个“PRD工艺技能”的宝库?如果你在互联网或软件行业待过几年,一定会对“PRD”这个词又爱又恨。爱它,是因为一份好的PRD(产品需求文档)是项目成功的基石,是产品经理…...

新手教程使用python快速调用taotoken提供的多模型服务

新手教程:使用Python快速调用Taotoken提供的多模型服务 1. 注册Taotoken并获取API密钥 要开始使用Taotoken的多模型服务,首先需要注册账号并获取API密钥。访问Taotoken官网完成注册后,登录控制台,在「API密钥管理」页面可以创建…...

Zotero GPT全面解析:高效智能文献分析工具实战指南

Zotero GPT全面解析:高效智能文献分析工具实战指南 【免费下载链接】zotero-gpt GPT Meet Zotero. 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-gpt 在当今海量学术文献的时代,研究人员每天需要处理数十甚至上百篇论文,如何快…...

电感损耗详解:铜损与铁损分析

电感的损耗主要来源于其物理构造和材料特性,可分为铜损和**铁损(磁芯损耗)**两大类。这些损耗直接影响电感的效率、温升和整体电路性能,是电感选型和设计中的核心考量因素。 一、 电感损耗的主要类型与影响因素 损耗类型主要来源…...

DoL-Lyra整合包:5分钟快速上手终极游戏美化方案

DoL-Lyra整合包:5分钟快速上手终极游戏美化方案 【免费下载链接】DOL-CHS-MODS Degrees of Lewdity 整合 项目地址: https://gitcode.com/gh_mirrors/do/DOL-CHS-MODS 还在为Degrees of Lewdity游戏的美化配置烦恼吗?DoL-Lyra整合包为你提供了一站…...

ChineseSubFinder:5步搭建智能字幕下载系统,彻底告别手动搜索

ChineseSubFinder:5步搭建智能字幕下载系统,彻底告别手动搜索 【免费下载链接】ChineseSubFinder 自动化中文字幕下载。字幕网站支持 shooter、xunlei、arrst、a4k、SubtitleBest 。支持 Emby、Jellyfin、Plex、Sonarr、Radarr、TMM 项目地址: https:/…...

在 Node.js 后端服务中集成 Taotoken 实现异步聊天补全

在 Node.js 后端服务中集成 Taotoken 实现异步聊天补全 1. 准备工作 在开始集成 Taotoken 之前,需要确保已具备以下条件: 已注册 Taotoken 账号并获取有效的 API Key(可在控制台「API 密钥」页面生成)Node.js 项目使用 16.x 或…...

SVG技术解析:矢量图形与数据驱动设计实战

1. SVG技术全景解析:从矢量图形到数据驱动设计十年前我第一次接触SVG时,还只是把它当作简单的网页图标格式。直到参与某数据可视化项目,亲眼见证用200行SVG代码替代了3MB的PNG图集,才真正理解这种矢量语言的革命性价值。如今SVG早…...

LinkSwift:八大网盘直链解析工具使用指南,告别下载限速烦恼

LinkSwift:八大网盘直链解析工具使用指南,告别下载限速烦恼 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国…...

UR3正运动学建模:SDH vs MDH,到底该用哪个?一次讲清区别、选择与避坑指南

UR3正运动学建模:SDH与MDH的深度对比与工程实践指南 当面对UR3这类六自由度工业机械臂的正运动学建模时,许多工程师和研究者都会在标准DH参数法(SDH)和改进DH参数法(MDH)之间犹豫不决。这两种方法看似相似,却在坐标系定义、参数含义和实际应…...

虚拟显示器架构解析:ParsecVDD实现原理与技术细节

虚拟显示器架构解析:ParsecVDD实现原理与技术细节 【免费下载链接】parsec-vdd ✨ Perfect virtual display for game streaming 项目地址: https://gitcode.com/gh_mirrors/pa/parsec-vdd 在远程办公、游戏串流和多屏工作场景中,Windows系统对虚…...