TLS 1.3 密钥派生:HKDF 原理与实战

深入解析 TLS 1.3 密钥派生机制,HKDF 工作原理以及在 OpenSSL 中的实际应用。

April 27, 2026 · 2 min · 黑豆子

TLS 记录协议工作原理

TLS 记录协议(Record Protocol)是 TLS 协议栈的最底层,负责对数据进行分片、压缩、计算 MAC、加密和传输。理解它的工作原理有助于深入掌握 TLS 安全机制。 记录协议的核心功能 记录协议接收上层数据后,依次经过以下处理流程: 分片:将数据切分为固定大小的记录块 压缩:对数据进行压缩(TLS 1.3 已废弃) MAC 计算:添加消息认证码 加密:对数据加密 传输:发送加密后的数据 分片机制 每个 TLS 记录包含一个 5 字节的头部和可变长度的载荷: 1 2 3 4 5 +-----------+------------+----------------+ | 类型(1) | 版本(2) | 长度(2) | <- 头部 (5 字节) +-----------+------------+----------------+ | 加密数据... | <- 载荷 +-----------+---------------------------+ 类型:Content Type,1 字节,标识记录类型 0x14 = ChangeCipherSpec 0x15 = Alert 0x16 = Handshake 0x17 = Application Data 版本:Protocol Version,2 字节(TLS 1.2 为 0x0303,TLS 1....

April 26, 2026 · 3 min · 黑豆子

TLS 1.3 0-RTT:原理、安全风险与配置

TLS 1.3 引入了 0-RTT(Zero Round Trip Time,零往返时间)模式,旨在减少连接延迟,提升用户体验。本文深入解析 0-RTT 的工作原理、安全风险以及如何正确配置。 什么是 0-RTT? 0-RTT 是 TLS 1.3 引入的新特性,允许客户端在首次握手时就开始发送加密数据,无需等待服务器完成握手。相比传统的 1-RTT 或 2-RTT 模式,这可以显著减少建立连接所需的时间。 各版本 TLS 的往返次数 TLS 版本 模式 往返次数(RTT) TLS 1.2 RSA 完整握手 2-RTT TLS 1.2 ECDHE 完整握手 1-RTT TLS 1.3 完整握手 1-RTT TLS 1.3 0-RTT 0-RTT 工作原理 首次连接(建立会话) 1 2 3 4 客户端 ───── ClientHello ────> 服务器 客户端 <─── ServerHello ───── 服务器 客户端 <─── 加密完成 ───────── 服务器 (+Session Ticket) 客户端发送 ClientHello,请求建立 TLS 1....

April 25, 2026 · 2 min · 黑豆子

TLS ALPN 协议协商:HTTP/2 如何与 HTTPS 握手同步完成

什么是 ALPN ALPN(Application-Layer Protocol Negotiation,应用层协议协商)是 TLS 协议的一个扩展,定义于 RFC 7301。它允许客户端和服务器在 TLS 握手阶段就协商好使用哪个应用层协议,而无需额外的往返通信。 如果没有 ALPN,客户端只能先建立 TLS 连接,再通过 NPN(Next Protocol Negotiation,已废弃)或在 TLS 握手完成后通过额外协商来确定使用 HTTP/1.1 还是 HTTP/2。ALPN 将这个过程整合到 TLS 握手中,减少了延迟。 ALPN 的工作原理 在 TLS ClientHello 消息中,客户端通过 application_layer_protocol_negotiation 扩展发送自己支持的协议列表,按优先级排序。服务器从中选择一个双方都支持的协议,并在 ServerHello 中回显该选择。 整个协商过程在 TLS 握手内部完成,对应用层透明: 1 2 3 4 5 6 7 8 9 10 11 12 Client Server | | |-------- ClientHello ---------->| | + ALPN: [h2, http/1.1] | | | |<------- ServerHello -----------| | + ALPN: h2 | | | |-------- 后续 TLS 握手 -------->| | | |<===== TLS 加密通道建立 ========>| | 使用 HTTP/2 通信 | 常见的 ALPN 协议标识符 协议标识符 说明 h2 HTTP/2 over TLS http/1....

April 22, 2026 · 3 min · 黑豆子

OCSP Stapling 详解:原理、配置与排查

什么是 OCSP Stapling OCSP Stapling(正式名称为 TLS Certificate Status Request)是一种 TLS 扩展机制,允许服务端在 TLS 握手过程中主动向客户端提供证书的状态信息,而无需客户端自行向 CA 的 OCSP 响应服务器发起查询。 它的核心价值在于:将证书状态验证的责任从客户端转移到服务端,同时保护用户隐私、提升连接速度。 为什么需要 OCSP Stapling 要理解 OCSP Stapling 的价值,先看没有它时证书撤销检查的三种方式。 方式一:CRL(证书吊销列表) CA 定期发布一个包含所有已吊销证书序列号的列表(CRL),客户端下载后自行检查。 1 2 # 查看 CRL 分布点(CRL Distribution Points) openssl x509 -in cert.pem -noout -text | grep -A2 "CRL Distribution" 问题很明显:CRL 文件会随着时间不断增长,下载和解析开销越来越大。即使使用增量 CRL(Delta CRL),也难以应对大规模部署。 方式二:OCSP(在线证书状态协议) 客户端直接向 CA 的 OCSP 响应服务器发送查询,获取单张证书的实时状态。 1 2 3 # 提取证书的 OCSP 响应器 URL openssl x509 -in cert.pem -noout -ocsp_uri # 示例输出: http://ocsp....

April 21, 2026 · 6 min · 黑豆子

TLS 密码套件命名规范解析

在配置 TLS/SSL 时,我们经常看到类似 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 这样的密码套件名称。对于初学者来说,这串字符可能令人困惑。本文将详细解析 TLS 密码套件的命名规范,帮助你理解每个部分的含义。 什么是密码套件 密码套件(Cipher Suite)是 TLS 协议的核心组件,它定义了一整套加密算法组合,包括: 密钥交换算法 身份认证算法 加密算法 哈希算法 一个密码套件决定了 TLS 握手期间如何协商安全参数,以及如何加密传输的数据。 TLS 1.2 密码套件命名格式 TLS 1.2 采用以下命名格式: 1 TLS_密钥交换算法_认证算法_加密算法_哈希算法 以 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 为例: 组成部分 含义 TLS 协议名称 ECDHE 密钥交换算法(Elliptic Curve Diffie-Hellman Ephemeral) RSA 身份认证算法 AES_256_GCM 加密算法(AES,256位,GCM模式) SHA384 哈希算法 各组件详解 密钥交换算法(Key Exchange) ECDHE:椭圆曲线临时 Diffie-Hellman(推荐,前向安全) DHE:临时 Diffie-Hellman(传统但性能较低) RSA:基于 RSA 的密钥交换(已被废弃,不提供前向安全) ECDH:椭圆曲线 Diffie-Hellman(静态) 认证算法(Authentication) RSA:RSA 公钥证书 ECDSA:椭圆曲线数字签名算法 DSS:数字签名标准(较老) 加密算法(Cipher) AES_256_GCM:AES 加密,256位密钥,GCM 模式(推荐) CHACHA20-POLY1305:Google 开发的流密码(移动设备友好) AES_128_CCM:AES 加密,128位密钥,CCM 模式 ARIA256-GCM:韩国标准加密算法 哈希算法(MAC/Hash)...

April 20, 2026 · 2 min · 黑豆子

HSTS:强制 HTTPS 访问的安全机制

什么是 HSTS? HSTS(HTTP Strict Transport Security)是一种网络安全策略机制,允许网站声明浏览器必须仅通过 HTTPS 连接访问。一旦服务器发送 Strict-Transport-Security 响应头,浏览器就会记住这个指令,在指定时间内(max-age)自动将所有 HTTP 请求转换为 HTTPS。 HSTS 响应头格式 1 Strict-Transport-Security: max-age=<过期时间>; includeSubDomains; preload 参数说明 参数 说明 max-age 浏览器记住该规则的时长,单位为秒。例如 31536000 代表一年 includeSubDomains 可选指令,作用范围包含所有子域名 preload 可选指令,表示该域名申请加入 HSTS 预加载列表 实际案例 查看主流网站的 HSTS 头配置: 1 2 # 使用 curl 查看 HSTS 响应头 curl -sI https://cloudflare.com | grep -i strict-transport-security 输出示例: 1 Strict-Transport-Security: max-age=15552000; includeSubDomains 验证多个网站 1 2 3 4 5 # 检查不同网站的 HSTS 配置 for domain in cloudflare....

April 19, 2026 · 2 min · 黑豆子

TLS 1.2 与 TLS 1.3 的主要区别

TLS(Transport Layer Security)协议是 HTTPS 的核心安全保障。从 TLS 1.2 到 TLS 1.3,协议经历了重大改进。本文详细对比两者的主要区别,帮助你理解为什么应该优先使用 TLS 1.3。 握手过程:从 2-RTT 到 1-RTT TLS 1.2 的完整握手需要两次往返(2-RTT): 1 2 3 4 ClientHello + ServerHello + 证书 + 密钥交换 → ← ServerKeyExchange + 证书请求 + ServerHelloDone ClientKeyExchange + 证书验证 + Finished → ← Finished → 应用数据 TLS 1.3 将握手优化为一次往返(1-RTT): 1 2 3 ClientHello + 密钥交换材料 → ← ServerHello + 密钥交换材料 + 证书 + Finished Finished → 应用数据 TLS 1.3 还支持 0-RTT 模式,允许在首次连接时就开始发送加密数据,但需要预先共享密钥。...

April 18, 2026 · 2 min · 黑豆子

双向 TLS 认证实战指南

什么是双向 TLS 认证 普通 HTTPS 连接中,客户端验证服务器证书,确保连接的是真实的服务器。双向 TLS(Mutual TLS,简称 mTLS) 在此基础上增加了服务器对客户端的验证——客户端必须提供有效的证书才能建立连接。 这种认证方式比用户名密码更安全,广泛用于: API 服务间的身份认证 零信任网络架构 企业内部系统访问控制 高安全要求的金融、医疗系统 工作原理 mTLS 握手过程: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 客户端 服务器 | | |---------- ClientHello --------------->| |<--------- ServerHello ----------------| |<--------- Certificate ----------------| (服务器证书) |<--------- CertificateRequest ---------| (请求客户端证书) |<--------- ServerHelloDone ------------| | | |---------- Certificate ---------------->| (客户端证书) |---------- ClientKeyExchange --------->| |---------- CertificateVerify --------->| (证明拥有私钥) |---------- Finished ------------------>| |<--------- Finished -------------------| | | |====== 加密通信通道 ====================| 关键区别:服务器发送 CertificateRequest,客户端响应自己的证书并用私钥签名证明身份。...

April 11, 2026 · 3 min · 黑豆子

HTTPS 混合内容问题及解决方案

当 HTTPS 页面加载 HTTP 资源时,就会产生混合内容(Mixed Content)。浏览器会阻止不安全的请求,导致页面功能异常。本文介绍混合内容的类型、排查方法和解决方案。 什么是混合内容 HTTPS 页面中通过 HTTP 加载的资源称为混合内容: 1 2 3 4 <!-- HTTPS 页面中的混合内容 --> <script src="http://example.com/script.js"></script> <img src="http://example.com/image.jpg"> <link rel="stylesheet" href="http://example.com/style.css"> 混合内容类型 混合被动内容(Mixed Passive Content) 低风险资源,浏览器通常只显示警告: <img> 图片 <audio> / <video> 媒体 <object> 子资源 混合主动内容(Mixed Active Content) 高风险资源,浏览器会直接阻止: <script> 脚本 <link> 样式表 <iframe> 内嵌页面 XMLHttpRequest / Fetch 请求 <frame> / <object> 加载的页面 排查方法 浏览器控制台 打开开发者工具(F12),查看 Console 和 Security 面板: 1 2 3 Mixed Content: The page at 'https://example....

April 5, 2026 · 2 min · 黑豆子