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

TLS 1.3 Post-Handshake 消息全面解析

TLS 1.3 在握手效率和安全机制上做了重大改进。除了优化的握手流程外,协议还定义了一系列 Post-Handshake 消息,在握手完成后处理会话恢复、密钥更新等重要功能。理解这些消息对于深入掌握 TLS 1.3 至关重要。 什么是 Post-Handshake 消息? 在 TLS 1.3 中,握手完成后双方进入加密通信阶段。此时协议定义了一组特殊消息,用于处理握手后的事务: NewSessionTicket:发送会话票据,用于后续会话恢复 KeyUpdate:更新加密密钥,保持前向安全性 CertificateRequest:请求客户端证书(握手后认证) Certificate:提供客户端证书 CertificateVerify:验证客户端证书 这些消息与主握手流程独立,通过独立的加密通道传输。 NewSessionTicket(会话票据) 原理 NewSessionTicket 是 TLS 1.3 会话恢复机制的核心。当客户端和服务器完成完整握手后,服务器可以发送一个加密的会话票据给客户端。下次连接时,客户端可以使用这个票据恢复会话,无需完整握手,从而实现 1-RTT 甚至 0-RTT 的快速连接。 工作流程 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 完整握手: 客户端 服务器 | | |--------------- ClientHello ----------------->| | (附 session_id / session_ticket) | |<-------------- ServerHello ------------------| |<-------------- Certificate ------------------| |<-------------- CertificateVerify ------------| |<---------------- Finished -------------------| |--------------- Finished -------------------->| | | |================ 加密通道 ====================| | | |<------------- NewSessionTicket -------------| | | 快速恢复(0-RTT): 客户端 服务器 | | |-------- ClientHello + EarlyData + Ticket -->| |<-------- ServerHello + EarlyData ------------| |<---------------- Finished -------------------| |--------------- Finished -------------------->| | | 实际验证 使用 OpenSSL 查看 TLS 1....

June 7, 2026 · 3 min · 黑豆子

OpenSSL SM4 加密算法使用指南

SM4 是中国国家密码管理局发布的分组密码算法,于 2006 年正式发布为行业标准。2012 年被采纳为国家标准(GB/T 32907-2016),2021 年成为 ISO/IEC 标准(ISO/IEC 18033-3:2010/Amd.1:2021)。 作为国密算法的重要组成部分,SM4 被广泛应用于政府、金融、电信等对数据安全有高要求的领域。本文介绍如何在 OpenSSL 中使用 SM4 算法进行数据加密。 环境要求 OpenSSL 3.0 及以上版本原生支持 SM4 算法,无需额外安装 GmSSL。 1 openssl version 输出: 1 OpenSSL 3.0.19 27 Jan 2026 (Library: OpenSSL 3.0.19) 查看支持的 SM4 模式: 1 openssl list -cipher-algorithms | grep SM4 输出: 1 2 3 4 5 6 sm4 => SM4-CBC SM4-CBC SM4-CFB SM4-CTR SM4-ECB SM4-OFB 支持的模式包括:CBC、CTR、CFB、OFB、ECB。 ⚠️ 注意:不推荐使用 ECB 模式,因为它会产生相同的密文块,容易泄露数据模式。 SM4-CBC 加密解密 SM4-CBC 是最常用的模式,结合 PKCS#5/PKCS#7 填充实现安全加密。...

June 6, 2026 · 3 min · 黑豆子

国密 SM2 证书详解:从生成到部署

国密 SM2 算法是中国国家密码管理局发布的椭圆曲线公钥密码算法,相比传统的 RSA 和国际通用 ECDSA 曲线,SM2 在国内有着特殊的应用场景和政策要求。本文详细介绍 SM2 证书的生成、验证和部署。 SM2 证书与 RSA/ECDSA 证书的区别 算法基础 特性 RSA ECDSA (secp256r1) SM2 密钥长度 2048/4096 bit 256 bit 256 bit 曲线类型 离散对数 椭圆曲线 椭圆曲线 (SM2 曲线) 签名算法 RSA + SHA-256 ECDSA + SHA-256 SM2 + SM3 国际认可 广泛认可 广泛认可 中国国密标准 性能 较慢 较快 与 secp256r1 相当 关键差异 签名算法:SM2 证书使用 SM3 哈希算法进行签名,而不是 SHA-256 曲线参数:SM2 使用特定的椭圆曲线参数(国家密码管理局指定) 兼容性:国际浏览器和设备默认不支持 SM2 证书,需要国密浏览器或支持国密的组件 生成 SM2 证书 环境要求 确保系统安装的是 OpenSSL 3....

June 4, 2026 · 3 min · 黑豆子

TLS 会话票据密钥轮换最佳实践

详解 TLS 会话票据(Session Ticket)的工作原理,为什么需要定期轮换密钥,以及如何在 Nginx、Apache 中配置安全的密钥轮换策略。

June 3, 2026 · 3 min · 黑豆子

SSH 密钥轮换完整指南

SSH 密钥轮换是安全运维中的重要实践。本文将介绍为什么需要轮换 SSH 密钥,以及如何实现安全、便捷的密钥轮换方案。 为什么要轮换 SSH 密钥 长期使用同一个 SSH 密钥会带来以下风险: 密钥泄露风险:密钥可能通过各种途径泄露(备份泄漏、离职人员带走等) 密钥老化:长时间使用的密钥可能被暴力破解或通过其他方式破解 合规要求:许多安全标准和合规要求强制定期更换认证凭据 最小权限原则:定期轮换可以确保只有当前需要访问的用户持有有效密钥 手动轮换流程 1. 生成新密钥 1 2 3 4 5 # 使用 Ed25519 算法(推荐) ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_new -C "your-email@example.com" # 或使用 RSA(如果需要兼容旧系统) ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_new -C "your-email@example.com" 2. 分发公钥到服务器 1 2 3 4 5 6 7 # 方式一:使用 ssh-copy-id ssh-copy-id -i ~/.ssh/id_ed25519_new.pub user@server # 方式二:手动添加到远程服务器的 authorized_keys ssh user@server "mkdir -p ~/.ssh && chmod 700 ~/....

June 2, 2026 · 3 min · 黑豆子

TLS 指纹识别与 JA3/JA4 指南

TLS 指纹识别是一种通过分析 TLS 握手过程中的参数来识别客户端或服务器的技术。与传统的 IP 地址或端口识别不同,TLS 指纹更加稳定,即使攻击者更换 IP 地址,也能通过指纹识别出来。 什么是 TLS 指纹? TLS 指纹(TLS Fingerprint)是基于 TLS 握手过程中的特定参数生成的唯一标识。这些参数包括: TLS 版本:如 TLS 1.2、TLS 1.3 密码套件列表:客户端支持的密码套件顺序 扩展列表:支持 TLS 扩展 支持的群(TLS 1.3)或椭圆曲线(TLS 1.2) 签名算法 不同的 TLS 库和应用程序在握手时会发送不同的参数组合,这使得它们可以被识别。 JA3 与 JA4 的区别 JA3 JA3 是由 Salesforce 开发的 TLS 指纹方法,格式为: 1 TLSVersion,CipherSuites,Extensions,EllipticCurves,SignatureAlgorithms 示例: 1 771,4865-4866-4867-49195-49199-49171-49172-156-157-47-53,0-23-65281-16-22-35,29-23-24,0 然后对整个字符串进行 MD5 哈希,生成 32 字符的十六进制指纹: 1 1ab209a4577159577b15884bde700eaf JA4 JA4 是较新的指纹方法,由 Salesforce 在 2024 年推出,格式更加详细: 1 2 3 4 5 6 JA4<a><b><c><d> - a: TLS 版本 (如 13 表示 TLS 1....

May 30, 2026 · 2 min · 黑豆子

RSA 密钥长度选择与推荐

在搭建 HTTPS 服务或部署 PKI 基础设施时,RSA 密钥长度的选择是一个关键决策。密钥太短会带来安全隐患,密钥太长则会影响性能并增加计算资源消耗。本文将详细介绍如何根据不同场景选择合适的 RSA 密钥长度。 什么是 RSA 密钥长度 RSA 密钥长度指的是模数(modulus)的 bit 数,常见的有 2048 位、3072 位和 4096 位。密钥长度直接决定了 RSA 算法的安全强度——位数越高,破解难度呈指数级增长,但生成和使用密钥的计算成本也越高。 安全级别与密钥长度对照 根据 NIST(美国国家标准与技术研究院)的推荐,不同 RSA 密钥长度对应的安全强度如下: RSA 密钥长度 约等安全级别 适用场景 1024 位 ~80 bit 已不推荐使用,仅用于兼容老系统 2048 位 ~112 bit 当前最低标准,兼容性与性能的平衡点 3072 位 ~128 bit 高安全要求场景,长期保护需求 4096 位 ~140 bit 最高安全级别,敏感数据保护 注意:1024 位 RSA 密钥已被认为是不可信的,主流浏览器和证书颁发机构已不再签发基于 1024 位 RSA 的证书。 当前主流推荐 2048 位:通用场景的最佳选择 对于大多数 Web 服务和内部系统,2048 位 RSA 密钥是当前的最低安全标准。它提供了足够的安全强度,同时保持了良好的性能。 使用 OpenSSL 生成 2048 位 RSA 私钥:...

May 26, 2026 · 2 min · 黑豆子

TLS 证书类型详解:DV、OV、EV 的区别与选择

在选择 HTTPS 证书时,你可能听说过 DV、OV、EV 三种类型。它们有什么区别?各自的适用场景是什么?本文详细解读这三种证书类型的验证级别、安全特性和选择建议。 证书类型概述 TLS/SSL 证书按照验证级别分为三类: 类型 全称 验证级别 颁发速度 适用场景 DV Domain Validation 域名所有权 分钟级 个人网站、测试环境 OV Organization Validation 域名 + 企业身份 小时级 商业网站、企业应用 EV Extended Validation 全面企业验证 天级 金融、电商、高信任需求 DV 证书(域名验证) DV 证书是最基础的 TLS 证书类型,只验证申请者对域名的控制权。 验证方式 域名所有权验证(DNS 记录、邮件验证、文件验证) 不验证申请者身份 完全自动化颁发 真实示例 使用 Let’s Encrypt 证书查看: 1 echo | openssl s_client -connect www.letsencrypt.org:443 -servername www.letsencrypt.org 2>/dev/null | openssl x509 -noout -subject -issuer 输出: 1 2 subject=CN = letsencrypt....

May 22, 2026 · 3 min · 黑豆子

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