SecDoc

技术博客,专注安全相关工具和技能 - SSL, HTTPS, TLS, OpenSSL, SSH

使用 SSLKEYLOGFILE 在 Wireshark 中解密 TLS 流量

在排查 HTTPS 连接问题时,能够解密 TLS 流量是极其重要的技能。Wireshark 支持通过 SSLKEYLOGFILE 方式解密 TLS 流量,本文详细介绍其工作原理和实操步骤。 工作原理 TLS 加密通信的安全性来自密钥交换过程。如果能够获取客户端和服务端协商出的密钥(Master Secret 或 Traffic Keys),就能解密捕获的 TLS 流量。 SSLKEYLOGFILE 是 NSS 密码库引入的一个特性,被 Chrome、Firefox、curl 等支持。客户端在建立 TLS 连接时,会将密钥材料写入指定文件,Wireshark 读取该文件即可解密流量。 ⚠️ 注意:本文仅用于调试自己的 TLS 连接。请勿用于窃听他人通信。 前置要求 Wireshark(支持 TLS 1.2 和 TLS 1.3 解密) 支持 SSLKEYLOGFILE 的客户端(如 Chrome、Firefox、curl、OpenSSL s_client) 环境准备 1. 创建 Keylog 文件 1 2 3 # 创建空文件用于存储密钥 touch ~/ssl-keylog.txt chmod 600 ~/ssl-keylog.txt 2. 配置环境变量 在 Linux/macOS 上: 1 export SSLKEYLOGFILE=~/ssl-keylog.txt 在 Windows 上(PowerShell):...

May 19, 2026 · 2 min · 黑豆子

X.509 证书扩展详解

X.509 证书的核心功能由扩展(Extensions)机制实现。扩展允许在证书中添加额外信息,定义证书的用途、约束、身份验证方式等关键属性。本文详细介绍常见扩展的作用和使用方法。 什么是证书扩展 X.509 v3 引入的扩展机制是现代 PKI 的基础。每个扩展由 OID(对象标识符)、关键性标志和扩展值组成。 扩展分为两类: 关键扩展(Critical):证书使用者必须理解和处理的扩展,否则证书验证失败 非关键扩展(Non-critical):可选的扩展,可被忽略但不应影响验证 常见扩展详解 1. Basic Constraints(基本约束) 定义证书是否为 CA(证书颁发机构)以及证书链深度。 1 2 3 4 5 6 7 8 # CA 证书 basicConstraints=CA:TRUE # 终端实体证书 basicConstraints=CA:FALSE # 无限制的 CA 路径长度 basicConstraints=CA:TRUE,pathlen:10 实际输出: 1 2 X509v3 Basic Constraints: CA:TRUE 2. Key Usage(密钥用法) 指定证书密钥的允许用途。 1 2 3 4 5 6 7 8 # 服务器认证证书 keyUsage=digitalSignature,keyEncipherment # CA 签名证书 keyUsage=digitalSignature,keyCertSign,cRLSign # 代码签名证书 keyUsage=digitalSignature,nonRepudiation 常见值: digitalSignature:数字签名 keyEncipherment:密钥加密 dataEncipherment:数据加密 keyCertSign:证书签名 cRLSign:CRL 签名 3....

May 18, 2026 · 3 min · 黑豆子

国密 SSL/TLS 配置指南:SM2/SM3/SM4 在 Nginx 中的应用

介绍国密 SSL/TLS 算法(SM2/SM3/SM4),讲解在 OpenSSL 和 Nginx 中配置国密加密的实战方法。

May 17, 2026 · 3 min · 黑豆子

OpenSSL s_time:SSL/TLS 性能测试工具详解

openssl s_time 是 OpenSSL 官方提供的 SSL/TLS 性能基准测试工具。它通过模拟大量握手连接来测量服务器的每秒处理能力,是评估 TLS 性能的重要工具。 基本用法 1 openssl s_time -connect example.com:443 -new -time 10 参数说明: -connect host:port — 目标服务器地址(默认端口 4433) -new — 测试新建连接(完整握手) -reuse — 测试连接重用(会话恢复) -time seconds — 测试持续时间(默认 30 秒) 实际测试示例 测试 TLS 1.3 新建连接 1 2 3 4 5 6 $ openssl s_time -connect localhost:443 -new -time 3 -tls1_3 Collecting connection statistics for 3 seconds ********************************************************************************************************************************************************************************************************************************** 1243 connections in 1.85s; 671.89 connections/user sec, 0 bytes read per connection 1243 connections in 4 real seconds 测试 TLS 1....

May 16, 2026 · 2 min · 黑豆子

OpenSSL 交叉签名证书详解与实战

交叉签名证书(Cross Signed Certificate)是 SSL/TLS 基础设施中一个重要但常被误解的概念。本文深入解释交叉签名的原理、适用场景以及 OpenSSL 操作方法。 什么是交叉签名? 交叉签名是指由一个 CA(证书颁发机构)对另一个 CA 的证书进行签名。签名的对象是 CA 证书本身,而不是终端实体证书。 1 2 3 4 原始链:Root CA → Intermediate CA → Server Certificate 交叉签名链:Root CA (新) → Cross-signed Intermediate CA → Server Certificate ↑ 由新Root CA签名 关键特征: 交叉签名证书的 Subject(主题)与原始中间 CA 相同 Issuer(颁发者)变为进行交叉签名的根 CA 公钥与原始中间 CA 完全相同 典型使用场景 1. 多根 CA 信任 企业可能有两个不同的根 CA(如并购后的整合),需要让一张证书同时被两个根 CA 信任。 1 场景:公司有两个根 CA(Root CA 1 和 Root CA 2),都需要信任同一张服务器证书 2. 旧客户端兼容性 某些老旧客户端只信任特定的根 CA,通过交叉签名让新证书也能被这些客户端接受。...

May 15, 2026 · 3 min · 黑豆子

OpenSSL verify 命令详解:证书链验证原理与实践

详解 OpenSSL verify 命令的用法,包括证书链验证、CA 存储、partial_chain、trust 设置等核心参数,每个命令都经过实际验证。

May 14, 2026 · 3 min · 黑豆子

OpenSSL Engine 机制与硬件安全模块集成

深入解析 OpenSSL Engine 架构,讲解如何通过 Engine 接口集成 HSM、PKCS#11 设备、云 KMS 等外部加密服务。

May 13, 2026 · 3 min · 黑豆子

Nginx 中椭圆曲线配置实战指南

在配置 HTTPS 时,ECDHE(椭圆曲线 Diffie-Hellman 密钥交换)是实现完全前向保密(PFS)的核心机制。但很多人忽视了曲线选择的重要性——不同的椭圆曲线在安全级别和性能上差异显著。本文详细介绍 Nginx 中如何选择和配置椭圆曲线。 椭圆曲线基础 椭圆曲线密码学(ECC)相比传统 RSA 具有更短的密钥和更高的安全性。以常见的曲线为例: 曲线 密钥长度 安全级别 适用场景 prime256v1 (secp256r1) 256 位 约 128 位 通用场景,推荐 X25519 256 位 约 128 位 现代推荐,更快 secp384r1 384 位 约 192 位 高安全需求 secp521r1 521 位 约 256 位 最高安全级别 注意:X25519 是蒙哥马利曲线,只用于密钥交换;secp256r1 是魏尔斯特拉斯曲线,可同时用于密钥交换和数字签名。 查看 Nginx 支持的曲线 首先确认 Nginx 编译时支持的椭圆曲线列表: 1 2 3 4 5 # 查看 Nginx 支持的曲线 nginx -V 2>&1 | grep -o "X25519\|secp256r1\|secp384r1" # 运行时查看 OpenSSL 支持的曲线 openssl ecparam -list_curves | grep -E "prime256v1|secp384r1|X25519" 输出示例:...

May 12, 2026 · 3 min · 黑豆子

TLS 1.3 Hello Retry Request 机制详解

在 TLS 1.3 的握手过程中,客户端首先发送 ClientHello 消息,其中包含支持的密码套件、扩展和密钥共享参数。有时候服务端发现客户端提供的参数需要调整,就会发送一个特殊的响应——Hello Retry Request(简称 HRR)。本文详解 HRR 的触发条件、工作原理和实际观察方法。 什么是 Hello Retry Request Hello Retry Request 是 TLS 1.3 引入的一种握手优化机制。当服务端收到的 ClientHello 消息中的参数不符合要求时(比如缺少必要的密钥共享、密码套件不匹配等),服务端不会直接拒绝连接,而是发送一个 HelloRetryRequest 消息,要求客户端重新发送带有正确参数的 ClientHello。 这与 TLS 1.2 的行为形成对比——TLS 1.2 中如果密码套件不兼容,服务端会直接发送 Handshake Failure 警报并终止连接。 HRR 的触发条件 HRR 主要在以下几种情况被触发: 1. Key Share 不符合要求 客户端发送的 key_share 扩展中提供的密钥共享参数不被服务端接受。常见原因包括: 使用了服务端不支持的椭圆曲线 密钥共享参数格式不正确 2. 缺少必要的 Cookie 服务端要求验证客户端身份时,会在 HRR 中包含 cookie 扩展,客户端下一次 ClientHello 必须原样返回这个 Cookie。 3. 密码套件协商 虽然现代 TLS 1.3 实现通常支持所有标准密码套件,但在某些特殊配置下,服务端可能要求客户端使用特定的套件。 HRR 工作流程 完整的 HRR 流程如下:...

May 11, 2026 · 2 min · 黑豆子

TLS Alert Protocol 告警协议详解

在 TLS 协议通信过程中,当发生错误或需要通知对方某些情况时,Alert Protocol(告警协议) 就会发挥作用。理解告警协议有助于排查 TLS 连接问题和进行安全调试。 什么是 TLS Alert Protocol TLS Alert Protocol是 TLS 记录层的子协议之一,用于在 TLS 会话中传递告警信息。这些告警可以是: 警告(Warning):告知对方注意某些情况,但不会中断连接 致命错误(Fatal):导致连接立即关闭 告警消息通常在以下场景出现: 证书验证失败 握手过程出错 加密操作异常 协议版本不兼容 告警消息格式 每个告警消息包含两个字段: 字段 长度 说明 Alert Level 1 字节 1 = Warning,2 = Fatal Alert Description 1 字节 具体告警类型的编号 1 2 3 4 +----------------+----------------+ | Alert Level | Alert Descr | | (1 byte) | (1 byte) | +----------------+----------------+ 告警级别 Warning(警告) 警告级别告警不会终止连接,但可能影响后续通信。常见警告包括: close_notify:正常关闭通知 no_certificate:无可用证书 bad_certificate:证书格式有问题 unsupported_certificate:不支持的证书类型 certificate_revoked:证书已吊销 certificate_expired:证书已过期 certificate_unknown:证书未知 Fatal(致命) 致命告警会导致连接立即关闭。常见致命告警包括:...

May 10, 2026 · 2 min · 黑豆子