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 · 黑豆子

SSH FIDO2 安全密钥认证配置指南

什么是 FIDO2 安全密钥? FIDO2 是一个开放认证标准,旨在提供更安全的密码替代方案。在 SSH 认证场景中,FIDO2 安全密钥(如 YubiKey、Titan Security Key 等)可以存储私钥,实现硬件级别的私钥保护。 与传统 SSH 密钥相比,FIDO2 安全密钥具有以下优势: 私钥永不离开硬件设备:即使计算机被攻破,攻击者也无法获取私钥 需要物理按键:每次认证都需要用户触摸密钥确认,防止远程恶意使用 支持 PIN 保护:可设置 PIN 码作为额外验证层 支持常驻密钥:密钥可存储在设备上,在多台机器间共享使用 支持的密钥类型 OpenSSH 支持两种 FIDO2 密钥类型: ecdsa-sk:基于 ECDSA 曲线的安全密钥 ed25519-sk:基于 Ed25519 的安全密钥(推荐) 生成 FIDO2 SSH 密钥 基本生成命令 1 ssh-keygen -t ed25519-sk -C "your-email@example.com" 生成过程中需要: 按提示触碰安全密钥的金属感应区 输入设备 PIN 码(如已设置) 常用生成选项 1. 创建常驻密钥(可在多台设备使用) 1 ssh-keygen -t ed25519-sk -O resident -C "resident-key@example.com" 常驻密钥存储在安全密钥内部,可通过 ssh-add -K 从其他机器加载。 2. 禁用触控要求(不推荐) 1 ssh-keygen -t ed25519-sk -O no-touch-required -C "no-touch@example....

June 22, 2026 · 2 min · 黑豆子

TLS 1.3 握手摘要与 CertificateVerify 深度解析

深入解析 TLS 1.3 握手摘要(Transcript)机制,以及 CertificateVerify 消息如何验证证书私钥所有权。

June 21, 2026 · 4 min · 黑豆子

CRYSTALS-Kyber 密钥封装算法原理详解

引言 CRYSTALS-Kyber 是 NIST 后量子密码学标准中的核心密钥封装机制(Key Encapsulation Mechanism, KEM),于 2024 年正式发布。作为 TLS 1.3 未来版本中 ECDHE 的潜在替代方案,理解 Kyber 的工作原理对于安全工程师至关重要。本文将深入解析 Kyber 的数学基础和工作流程。 1. 为什么需要后量子 KEM? 传统 TLS 1.3 使用 ECDHE(椭圆曲线 Diffie-Hellman)进行密钥交换,其安全性基于有限域上离散对数问题的困难性。 量子计算机的 Shor 算法能在多项式时间内解决: 整数分解问题(RSA 密钥) 离散对数问题(ECDSA、ECDHE 密钥) 这意味着:一旦拥有足够大规模的量子计算机,当前基于 RSA 和 ECC 的密钥交换将不再安全。 后量子密码学(Post-Quantum Cryptography, PQC)应运而生——设计能够抵御量子攻击的经典算法。NIST 于 2024 年正式发布后量子密码学标准,CRYSTALS-Kyber 正是其中的核心算法。 2. 格理论基础 Kyber 的安全性建立在**格理论(Lattice-based Cryptography)**之上。 什么是格? 格(Lattice)是 n 维空间中一组线性无关向量的整数线性组合。用数学语言描述: 给定 n 个线性无关的向量 b₁, b₂, …, bₙ ∈ ℝⁿ,格 L 是这些向量的所有整数线性组合的集合: 1 L = { Σᵢ aᵢbᵢ | aᵢ ∈ ℤ } 格困难问题 格密码学的安全性基于以下困难问题:...

June 20, 2026 · 3 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 · 黑豆子