SSL 证书链顺序:原理、问题与正确配置

深入解析 SSL 证书链的正确顺序,常见错误原因,以及使用 OpenSSL 和 Nginx 正确配置证书链的实战指南。

June 28, 2026 · 4 min · 黑豆子

OpenSSL 3.x 自定义 Engine 开发实战

本文介绍 OpenSSL 3.x 中自定义 Engine 的开发方法,帮助你实现硬件安全模块(HSM)集成、国密算法扩展等需求。 什么是 OpenSSL Engine? OpenSSL Engine 是 OpenSSL 密码学操作的可插拔后端实现。通过 Engine,你可以: 集成硬件安全模块(HSM) 使用国密算法(如 SM2/SM3/SM4) 调用专用的加密加速卡 实现自定义的密码学算法 查看可用 Engine 系统已内置多个 Engine,使用以下命令查看: 1 openssl engine -t 输出示例: 1 2 3 4 5 6 (dynamic) Dynamic engine loading support [ unavailable ] (padlock) VIA PadLock (no-RNG, no-ACE) [ unavailable ] (afalg) AFALG engine [ unavailable ] [ unavailable ] 表示该 Engine 在当前系统上不可用,但可以加载。 使用动态 Engine 加载 OpenSSL 支持动态加载自定义 Engine。创建一个简单的配置文件进行测试: 1 2 3 4 5 # 创建 Engine 配置目录 mkdir -p ~/....

June 27, 2026 · 3 min · 黑豆子

OpenSSL FIPS 140-2 模式配置指南

在需要对加密操作进行合规性控制的场景中,FIPS 140-2(或 FIPS 140-3)是一个重要的标准。本文介绍如何在 OpenSSL 中启用和配置 FIPS 模式。 什么是 FIPS 140-2? FIPS 140-2 是美国国家标准与技术研究院(NIST)发布的密码学模块安全要求标准。它定义了四个安全等级(Level 1-4),要求密码学实现经过严格测试和验证。 关键点: 强制要求在政府机构和受监管行业使用 OpenSSL 通过 FIPS 模块(OpenSSL-FIPS)提供支持 FIPS 模式开启后,仅允许使用经认证的加密算法 环境检查 首先检查当前 OpenSSL 版本: 1 openssl version -a 注意输出中的 FIPS 标记。如果显示 fips-mode 相关信息,说明已支持 FIPS。 安装 OpenSSL FIPS 模块 方法一:使用系统包管理器(推荐) Ubuntu/Debian: 1 2 sudo apt update sudo apt install openssl-fips RHEL/CentOS: 1 sudo yum install openssl-fips 方法二:从源码编译 1 2 3 4 5 6 7 8 9 # 下载 OpenSSL FIPS 模块源码(以 2....

June 26, 2026 · 2 min · 黑豆子

Nginx TLS 1.3 最佳配置实践

TLS 1.3 是目前最安全的传输层协议版本,相比 TLS 1.2 有显著的性能和安全优势。本文介绍如何在 Nginx 中正确配置 TLS 1.3,并提供经过验证的配置示例。 TLS 1.3 的核心优势 TLS 1.3 相比 TLS 1.2 有以下关键改进: 握手简化:从 2-RTT 降至 1-RTT(0-RTT 可选),连接建立更快 移除不安全算法:仅保留 AEAD 加密套件,禁用 CBC 模式和 RC4 前向安全性:强制使用 ECDHE 密钥交换,始终支持 PFS 抗重放攻击:0-RTT 模式有重放保护机制 基础配置 以下是 Nginx TLS 1.3 的基础配置: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 server { listen 443 ssl http2; server_name example....

June 25, 2026 · 2 min · 黑豆子

OpenSSL ChaCha20-Poly1305 AEAD 加密实战

ChaCha20-Poly1305 是 TLS 1.2 和 TLS 1.3 中广泛使用的 AEAD(带认证的加密)密码套件,尤其在移动设备上因性能优势被广泛采用。本文深入解析其加密原理及 OpenSSL 命令行实现。 1. 什么是 AEAD? AEAD(Authenticated Encryption with Associated Data)同时提供: 机密性:通过加密保护数据隐私 完整性:通过 MAC(消息认证码)验证数据未被篡改 关联数据:可选择性地对未加密的元数据进行认证 常见的 AEAD 组合包括 AES-GCM、ChaCha20-Poly1305、ChaCha20-Poly1305-IETF。 2. ChaCha20 加密算法 2.1 算法概述 ChaCha20 是 Daniel J. Bernstein 于 2008 年设计的流密码算法,作为 Salsa20 的改进版本。其核心特点: 特性 说明 类型 对称流密码 密钥长度 256 位 Nonce 长度 96 位(12 字节) 块大小 512 位(64 字节) 迭代次数 20 轮(故名 ChaCha20) 2.2 加密原理 ChaCha20 使用**置换置换网络(PRP)**结构,将密钥、Nonce 和计数器混合生成 512 位的密钥流块: 1 2 ChaCha20(key, nonce, counter) → keystream blocks ciphertext = plaintext ⊕ keystream 核心操作包括:...

June 24, 2026 · 4 min · 黑豆子

OpenSSL SSL_get_error 错误码详解

在 OpenSSL 编程中,SSL_get_error() 是排查 SSL/TLS 连接问题的核心函数。当 SSL_read() 或 SSL_write() 返回负数时,需要调用它来确定具体的错误类型。本文详细介绍各错误码的含义及处理方法。 函数原型 1 2 3 #include <openssl/ssl.h> int SSL_get_error(const SSL *ssl, int ret); ret 是上次 SSL 操作的返回值(通常为负数),函数返回以下错误码之一: 错误码 常量 含义 0 SSL_ERROR_NONE 操作成功完成 1 SSL_ERROR_SSL 协议层面的内部错误 2 SSL_ERROR_WANT_READ 操作未完成,需要更多数据 3 SSL_ERROR_WANT_WRITE 操作未完成,需要写入更多数据 4 SSL_ERROR_WANT_X509_LOOKUP 等待 X509 回调完成 5 SSL_ERROR_SYSCALL 系统调用错误,检查 errno 6 SSL_ERROR_ZERO_RETURN 对端关闭连接 7 SSL_ERROR_WANT_CONNECT 等待连接完成 8 SSL_ERROR_WANT_ACCEPT 等待 Accept 完成 9 SSL_ERROR_WANT_ASYNC 等待异步操作 10 SSL_ERROR_WANT_ASYNC_JOB 等待异步任务 11 SSL_ERROR_WANT_CLIENT_HELLO_CB 等待 ClientHello 回调 12 SSL_ERROR_WANT_RETRY_VERIFY 等待重试验证 常见错误码详解 SSL_ERROR_SSL (1) 这是最常见的错误,表示协议层面的内部错误。通常由以下原因导致:...

June 23, 2026 · 4 min · 黑豆子

OCSP Must-Staple 详解与服务器配置

什么是 OCSP Must-Staple OCSP Must-Staple(RFC 6066 第 8 节定义)是一种证书扩展,用于告知客户端证书颁发机构(CA)要求在 TLS 握手时必须提供 OCSP 响应。通过此扩展,客户端可以拒绝与无法提供有效 OCSP 响应(或 OCSP stapling)的服务器建立连接。 作用机制 当证书包含 Must-Staple 扩展时: 服务器端:必须在 TLS 握手时通过 OCSP stapling 发送预缓存的 OCSP 响应 客户端验证:支持 Must-Staple 的客户端会检查 stapled OCSP 响应是否存在且有效 连接拒绝:如果服务器未提供有效的 OCSP 响应,客户端将拒绝建立连接 安全价值 Must-Staple 主要防止以下攻击场景: 防止吊销绕过:攻击者无法通过阻止客户端直接查询 OCSP 服务器来绕过证书吊销检查 减少客户端到 CA 的网络请求:通过 stapling 减少延迟和隐私泄露 强制证书状态检查:确保每次连接都进行证书有效性验证 验证证书是否包含 Must-Staple 使用 Let’s Encrypt 证书(推荐) Let’s Encrypt 签发的证书默认包含 Must-Staple 扩展。可以使用以下方式验证: 1 2 # 查看证书扩展信息 openssl x509 -in /etc/letsencrypt/live/example.com/cert.pem -noout -text | grep -i "ocsp" 如果证书包含 Must-Staple,会看到类似输出:...

June 19, 2026 · 3 min · 黑豆子

OpenSSH 后量子密钥交换配置指南

概述 随着量子计算技术的发展,传统加密算法面临潜在威胁。SSH 作为最常用的远程访问协议,其安全性尤为重要。本文介绍 OpenSSH 后量子密钥交换的配置方法,帮助管理员保护 SSH 连接免受"现在收集,以后解密"(Harvest Now, Decrypt Later)攻击。 为什么需要后量子密钥交换? “现在收集,以后解密"攻击 即使量子计算机尚未实用化,攻击者已经开始收集加密的 SSH 流量。当量子计算机足够强大时,这些历史数据可能被解密。这就是所谓的"现在收集,以后解密”(也称"收获现在,解密 later")攻击。 OpenSSH 官方文档指出:整个 SSH 连接的隐私取决于密钥协商。如果攻击者能够破解密钥协商,他们就能解密整个会话。攻击者无需实时执行此攻击——他们可以现在收集加密的 SSH 会话,然后在获得量子计算机后解密。 时间线 现在:攻击者开始收集加密数据 2030 年左右:RSA 和 ECDH 可能被量子计算机破解 2035 年:NIST 建议全面迁移到后量子密码学 OpenSSH 后量子支持历程 版本 发布时间 后量子支持 OpenSSH 9.0 2022年4月 默认启用 sntrup761x25519-sha512 OpenSSH 9.9 2024年 新增 mlkem768x25519-sha256 OpenSSH 10.0 2025年4月 mlkem768x25519-sha256 成为默认 OpenSSH 10.1 未来 未使用后量子算法时发出警告 RFC 9941 2026年4月 标准化 sntrup761x25519-sha512 支持的算法 混合密钥交换算法 sntrup761x25519-sha512 混合:NTRU Prime (sntrup761) + X25519 SHA-512 用于密钥派生 RFC 9941 标准化 mlkem768x25519-sha256...

June 18, 2026 · 2 min · 黑豆子

OpenSSL speed 命令实战:加密算法性能基准测试

openssl speed 是 OpenSSL 官方提供的加密算法性能基准测试工具。通过它可以了解不同加密算法在当前硬件上的处理速度,从而为生产环境选择合适的加密算法提供数据支撑。 基本用法 1 openssl speed [options] [algorithm...] 常用选项: -seconds N — 测试持续时间(默认 10 秒) -bytes N — 测试缓冲区大小(默认 16KB) -evp name — 使用 EVP 接口测试指定算法 -elapsed — 使用 wall-clock 时间而非 CPU 时间 -mr — 产生机器可读的输出 对称加密算法性能测试 测试 AES-256-GCM 1 2 3 4 5 6 7 8 9 10 $ openssl speed -seconds 1 -evp aes-256-gcm Doing AES-256-GCM for 1s on 16 size blocks: 1502986 AES-256-GCM's in 1....

June 17, 2026 · 3 min · 黑豆子

OpenSSL CMS AuthEnvelopedData 栈缓冲区溢出漏洞分析(CVE-2025-15467)

漏洞概述 2026 年 1 月 27 日,OpenSSL 官方发布了安全公告,披露了一个高危漏洞 CVE-2025-15467。该漏洞位于 OpenSSL 的 CMS(Cryptographic Message Syntax)实现中,当处理使用 AEAD(Authenticated Encryption with Associated Data)密码的 AuthEnvelopedData 结构时,存在栈缓冲区溢出问题。 漏洞严重性评级为 High,可导致拒绝服务(DoS),在特定条件下甚至可能实现远程代码执行(RCE)。 影响版本 受影响的 OpenSSL 版本: OpenSSL 3.6.x OpenSSL 3.5.x OpenSSL 3.4.x OpenSSL 3.3.x OpenSSL 3.0.x 不受影响的版本: OpenSSL 1.1.1 OpenSSL 1.0.2 修复版本: OpenSSL 3.6.1 OpenSSL 3.5.5 OpenSSL 3.4.4 OpenSSL 3.3.6 OpenSSL 3.0.19 技术分析 CMS 简介 CMS(Cryptographic Message Syntax,RFC 5652)是一种用于签名、加密消息的通用语法标准,广泛应用于: S/MIME:安全电子邮件 PKCS#7:加密消息语法 代码签名 证书管理(如 CRL、证书请求) CMS 支持多种加密数据格式,包括: EnvelopedData:加密数据 SignedData:签名数据 AuthEnvelopedData:带认证的加密数据(AEAD) AEAD 密码与 AES-GCM AEAD(Authenticated Encryption with Associated Data)是一种同时提供机密性和完整性的加密模式。常见的 AEAD 密码包括:...

June 16, 2026 · 2 min · 黑豆子