acme.sh:轻量级 ACME 证书管理工具实战

详解轻量级 ACME 客户端 acme.sh 的安装、证书申请、部署和自动续期配置,支持 Nginx、Apache、DNS 等多种验证方式。

July 9, 2026 · 3 min · 黑豆子

TLS 1.3 加密客户端问候:ECH 实战指南

本文介绍 TLS 1.3 中的 Encrypted Client Hello (ECH) 扩展,如何解决 SNI 明文泄露隐私问题。 SNI 隐私问题 在 TLS 握手过程中,客户端发送的 ClientHello 消息包含 Server Name Indication (SNI) 扩展,用于告知服务器希望连接的域名。问题在于:SNI 是明文传输的,任何中间设备(如 ISP、代理、防火墙)都可以看到用户正在访问哪个域名。 1 2 3 4 ClientHello ├── SNI: example.com ← 明文暴露! ├── supported_versions: TLS 1.3 └── cipher_suites: [...] 这意味着即使流量本身被加密,网络观察者仍能知道你访问了哪些网站。 ECH 解决方案 Encrypted Client Hello (ECH) 是 RFC 8446 的扩展,旨在加密 SNI 及其他敏感的 ClientHello 扩展。ECH 在 ClientHello 外层使用 ECH公钥 加密敏感的内部 ClientHello,只有目标服务器能解密。 工作原理 DNS 配置:服务器在 DNS 的 HTTPS 记录中发布 ECH 公钥 客户端加密:客户端使用 ECH 公钥加密敏感的 ClientHello 信息 服务器解密:服务器用私钥解密,确认 ECH 隧道建立成功 握手继续:后续握手正常进行,SNI 已被加密 1 2 3 4 5 6 7 8 Outer ClientHello (明文) ├── SNI: ech....

July 6, 2026 · 3 min · 黑豆子

DANE 与 TLSA 记录:DNS 时代的证书认证

DANE(DNS-Based Authentication of Named Entities)是一种基于 DNS 的证书认证机制,通过 TLSA 记录将证书信息绑定到域名上。本文详细介绍 DANE 的原理、TLSA 记录格式以及在 Nginx 中的配置方法。 传统证书验证的问题 传统的 TLS 证书验证依赖 CA(证书颁发机构)体系,存在以下问题: CA 可能被攻陷:全球有数百个可信 CA,一个 CA 被攻陷即可签发任意域名证书 证书透明度不足:难以发现恶意或错误签发的证书 依赖链复杂:多级中间 CA 增加验证复杂度和风险 什么是 DANE? DANE 定义于 RFC 6698,是一种基于 DNS 的证书认证机制。它通过在 DNS 中添加 TLSA 记录(TLS Authentication),将证书信息直接与域名绑定,绕过传统 CA 验证体系。 DANE 的核心优势 防范 CA 被攻陷:即使 CA 被攻陷,攻击者也无法伪造 DNS 中的 TLSA 记录 自建 CA 的福音:企业内部 CA 签发的证书也能被客户端信任 证书固定:将证书指纹写入 DNS,客户端只能接受指定证书 TLSA 记录格式 TLSA 记录包含四个字段,格式为:Usage Selector MatchingType AssociationData 1 _443._tcp.example.com. IN TLSA 3 1 1 73D2522B56547E710E480F27CCFD6F75959422668C2C300B98AC07E6D7 1....

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

TLS握手消息加密时机详解

深入解析TLS握手过程中,每条消息在何时被加密,以及TLS 1.2与TLS 1.3在这方面的重要区别。

June 15, 2026 · 2 min · 黑豆子

深入理解 QUIC 协议的加密机制

QUIC(Quick UDP Internet Connections)是 Google 在 2013 年提出的新一代传输层协议,2018 年 IETF 将其标准化为 RFC 9000。QUIC 最显著的特点是将加密握手与可靠传输结合在一起,实现了 0-RTT 快速连接。本文深入剖析 QUIC 的加密机制,帮助读者理解它与传统 TLS 的区别。 QUIC 加密层概述 QUIC 的加密层位于传输层之上,但与传统 TLS 有本质不同: 特性 传统 TLS QUIC 承载协议 TCP UDP 加密层位置 TLS 层在 TCP 之上 QUIC 内置加密,集成在传输层 握手次数 1-RTT 或 0-RTT 1-RTT 或 0-RTT(更高效) 头加密 可选 必须加密 QUIC 的加密设计遵循 “加密 everything” 原则,尽可能减少明文传输。 QUIC 握手与密钥派生 QUIC 使用 TLS 1.3 的握手结果,但有自己的密钥派生流程。QUIC 的密钥派生使用 HKDF(HMAC-based Key Derivation Function),与 TLS 1.3 相同。...

June 12, 2026 · 3 min · 黑豆子

Nginx TLS 证书热更新与无损 reload 配置

在生产环境中,更新 TLS 证书是一个常见但敏感的操作。如果直接重启 Nginx 服务,会导致连接中断,影响用户体验。本文介绍如何在 Nginx 中实现 TLS 证书的热更新,在不中断服务的情况下完成证书更新。 什么是证书热更新? 证书热更新(Hot Reload)是指在不停止服务的情况下,重新加载新的证书文件。Nginx 支持通过发送 reload 信号来实现配置和证书的平滑重新加载。 与完全重启(nginx -s stop 然后 nginx)相比,reload 的优势在于: 不会中断正在处理的请求 平滑过渡,新连接使用新证书,旧连接继续使用旧证书 服务可用性不受影响 Nginx reload 机制 Nginx 支持以下几种信号: nginx -s reload - 平滑重新加载配置 kill -HUP <master_pid> - 发送 HUP 信号,作用与 reload 相同 kill -USR1 <master_pid> - 重新打开日志文件 kill -USR2 <master_pid> - 优雅升级(用于升级 Nginx 二进制文件) 当 Nginx 收到 reload 信号时: 主进程(Master Process)解析新的配置文件 如果配置合法,主进程启动新的工作进程(Worker Process) 旧的工作进程优雅退出(处理完现有连接后关闭) 新的工作进程使用新的证书 证书热更新操作步骤 1. 准备新的证书文件 首先,将新的证书和私钥文件复制到指定目录:...

June 10, 2026 · 4 min · 黑豆子

Nginx SSL 配置常见错误与排查

在生产环境中配置 HTTPS 时,经常会遇到各种问题。本文总结 Nginx SSL 配置中的常见错误及其排查方法,帮助你快速定位和解决问题。 1. 证书链顺序错误 常见症状 浏览器显示证书链不完整或提示「此证书链不受信任」: 1 2 # 使用 openssl s_client 查看证书链 echo | openssl s_client -connect example.com:443 -showcerts 2>/dev/null | grep -E "subject=|issuer=" 问题原因 Nginx 配置的证书文件只包含服务器证书,没有包含中间证书(Intermediate Certificate)。 解决方法 将证书链按正确顺序拼接:服务器证书 → 中间证书 → 根证书(可选)。 1 2 3 4 # 正确的证书链顺序 cat server.crt > nginx-ssl.crt cat intermediate.crt >> nginx-ssl.crt # 根证书通常不需要添加 Nginx 配置: 1 2 3 4 5 6 7 8 9 server { listen 443 ssl; server_name example....

June 8, 2026 · 4 min · 黑豆子

OpenSSL s_server 命令:快速搭建测试 TLS 服务器

在调试 TLS 配置或测试客户端证书时,我们经常需要一个临时的 HTTPS 服务器。OpenSSL 提供的 s_server 命令可以快速启动一个测试 TLS 服务器,无需复杂的配置。 本文将详细介绍 s_server 的各种用法,帮助你在调试和测试中提高效率。 快速启动 HTTPS 服务器 最简单的用法 只需要指定证书和私钥文件,即可启动一个 HTTPS 服务器: 1 openssl s_server -cert server.crt -key server.key -www 启动后,访问 https://localhost:4433/ 会看到一个状态页面,显示服务器支持的 TLS 版本和密码套件。 如果你没有现成的证书,可以快速生成一个自签名证书: 1 2 # 生成测试用证书 openssl req -x509 -newkey rsa:2048 -keyout server.key -out server.crt -days 365 -nodes -subj "/CN=Test Server" 常用端口和地址 默认端口是 4433。如果需要使用标准 HTTPS 端口 443,需要 root 权限: 1 2 3 4 5 # 监听 443 端口(需要 root 权限) openssl s_server -cert server....

May 29, 2026 · 3 min · 黑豆子

ACME 协议与自动化证书管理实战

深入解析 ACME 协议工作原理,详解 Let’s Encrypt 免费证书申请与 Certbot 自动续期配置,实现 HTTPS 证书自动化管理。

May 28, 2026 · 5 min · 黑豆子