加密与证书速查
对称/非对称/哈希算法、TLS 与 HTTPS 配置、证书链与 PKI、OpenSSL 实战、证书运维排查与密钥管理:加密与证书全场景速查。
加密算法基础
对称、非对称、哈希与国密算法(SM2/SM3/SM4)要点
AES 高级加密标准热门
NIST 于 2001 年发布的分组密码标准(FIPS 197),分组 128 位、密钥 128/192/256 位,是 TLS、磁盘加密与文件加密中使用广泛的对称算法。
RSA 公钥算法热门
1977 年提出的公钥算法,基于大整数分解难题,可同时用于加密与签名;RFC 8017(PKCS#1 v2.2)是其主流实现规范,新系统推荐 3072 位密钥。
AES-GCM 认证加密(AEAD)热门
基于 CTR 加密与 GHASH 认证的 AEAD 模式(NIST SP 800-38D),同时提供机密性与完整性,是 TLS 1.2/1.3 与 IPsec 中主流的 AES 工作模式。
SHA-256 摘要算法热门
256 位输出、512 位块、64 轮压缩的哈希函数;是证书签名、TLS、HMAC、文件校验与区块链中使用广泛的摘要算法。
AES-CBC 密码分组链接模式
经典 AES 工作模式:每个明文块先与前一密文块异或再加密,需要随机不可预测的 IV 与 PKCS#7 填充;TLS 1.3 已移除 CBC 套件。
SM4 分组密码(国密)
中国商用密码标准中的分组算法(GB/T 32907-2016):128 位分组与 128 位密钥、32 轮迭代结构,应用于 TLCP、WAPI 与国产密码产品。
SHA-2 家族(SHA-224/256/384/512)
FIPS 180-4 定义的哈希家族,包含 SHA-224、SHA-256、SHA-384、SHA-512 与截断变体;结构基于 Merkle–Damgård 迭代,是当前使用最广的密码学哈希。
HMAC 消息认证码
RFC 2104 / FIPS 198-1 定义的密钥化认证码:H((K⊕opad) || H((K⊕ipad) || M)),用于验证消息完整性与来源,广泛用于 API 签名与 JWT。
ECDSA 椭圆曲线数字签名
基于椭圆曲线离散对数难题的签名算法(FIPS 186-5),密钥与签名短:P-256 公钥约 64 字节、签名 DER 编码约 70-72 字节,广泛用于 TLS 与代码签名。
SM2 椭圆曲线公钥算法(国密)
GB/T 32918 系列定义的公钥算法:基于 256 位 SM2 曲线,包含数字签名、密钥交换与公钥加密三部分,配套 SM3 摘要,用于 TLCP 与国密证书。
ChaCha20-Poly1305 AEAD
RFC 8439 定义的认证加密组合:ChaCha20 加密 + Poly1305 认证,是 TLS 1.3 的三个标准套件之一,也是 WireGuard 等协议的数据面算法。
填充预言(padding oracle)与防护
服务端把填充错误与认证失败区分开时,攻击者可据此逐字节推断明文;防护要点是改用 AEAD、统一错误响应并保持处理耗时稳定。
MD5 消息摘要(已不安全)
RFC 1321 定义的 128 位摘要算法,块长 512 位;2004 年公开碰撞攻击,此后被用于伪造证书等场景,不能用于签名与证书。
SM3 密码杂凑算法(国密)
国密哈希标准(GB/T 32905-2016):输出 256 位、块长 512 位、64 轮,用于 SM2 签名、TLCP 的 PRF/MAC 与国密设备校验。
Base64 编码
RFC 4648 定义的二进制转文本编码:每 3 字节编码为 4 个字符,字符集含 A-Z、a-z、0-9、+ 与 /,尾部用 = 补位;体积约增加 33%。
AES-ECB 电码本模式(不建议使用)
最简单的分组模式:每块独立加密,相同明文块产生相同密文块,会泄漏数据结构(经典演示为位图轮廓可见),新系统一般不应选用。
Ed25519 签名
RFC 8032 定义的 EdDSA 方案:在 edwards25519 曲线上运行,签名确定性生成(不依赖随机数)、公钥 32 字节、签名 64 字节,性能与易用性突出。
SHA-1 摘要(已从证书体系淘汰)
160 位摘要算法(FIPS 180 系列早期);2017 年公开的 SHAttered 实践验证了碰撞可行性,浏览器与 CA 已全面停止接受 SHA-1 证书。
DES 数据加密标准(已淘汰)
1977 年的美国联邦分组密码标准:64 位分组、56 位有效密钥、16 轮 Feistel;密钥空间已被穷举验证攻破,仅存在于遗留系统中。
PBKDF2 口令派生
基于 HMAC 的迭代式口令派生(RFC 8018 定义于 PKCS#5 v2.1),通过大量迭代抬高离线破解成本;迭代参数需要随硬件进步持续上调。
X25519 密钥交换
RFC 7748 定义的 ECDH 变体:Curve25519 上的密钥协商,公钥/私钥均为 32 字节,实现简单、性能好,是 TLS 1.3 与 WireGuard 的常用组。
AES 密钥长度 128/192/256 对照
AES 支持三种密钥长度,轮数分别为 10/12/14 轮;AES-128 与 AES-256 在 TLS 与存储场景中使用广泛,安全性差异与性能开销需按场景权衡。
3DES 三重 DES(逐步停用)
用两把或三把 DES 密钥做 EDE 三次运算的过渡算法;64 位分组带来 Sweet32 类碰撞风险,NIST 已在 2023 年后停止认可其加密用途。
Argon2 口令散列
PHC 竞赛优胜方案并经 RFC 9106 标准化,含 Argon2d/i/id 三种变体;Argon2id 兼顾侧信道与 GPU 抵抗能力,是口令存储的推荐方案之一。
RSA-OAEP 加密填充
RFC 8017 定义的 OAEP 填充(哈希与掩码生成函数构造):通过哈希与掩码生成函数把随机性引入密文,抵御选择密文类攻击,是新系统加密场景的推荐填充。
前向保密(Forward Secrecy)
会话密钥由临时密钥协商产生并随会话丢弃,长期私钥泄漏也不影响已结束会话的机密性;TLS 1.3 默认具备该特性。
SHA-512 摘要算法
512 位输出、1024 位块、80 轮、64 位字运算;在 64 位平台上效率高,含 SHA-512/224、SHA-512/256 截断变体,也是 Ed25519 签名内部使用的哈希。
AES-CTR 计数器模式
把 AES 当作流密码:用 nonce + counter 生成密钥流与明文异或,支持并行加密与随机访问,常用于协议数据面与缓存加密;本身无完整性保护。
AEAD 认证加密概念
一次操作同时输出密文与认证标签,任何篡改都会导致解密失败;GCM、CCM、ChaCha20-Poly1305、SM4-GCM 都是 AEAD,关联数据(AAD)参与认证但不加密。
口令存储方案选型
现代口令存储可在 Argon2id、scrypt、bcrypt、PBKDF2 之间按环境能力选择,并设计参数升级策略;明文存储或单轮哈希不满足基本要求。
RSA 密钥长度选择(2048/3072/4096)
RSA 密钥长度直接决定安全强度与运算开销:2048 位约等于 112 位安全强度,3072 位约 128 位,4096 位约 152 位左右但代价明显更高。
ECDH 椭圆曲线密钥协商
双方各自生成密钥对并交换公钥,各自计算得到相同共享秘密;有静态(固定密钥)与临时(ECDHE)两种用法,后者提供前向保密。
ECDHE 临时密钥交换与前向保密
每次会话生成临时密钥对的 ECDH 变体,会话结束即丢弃私钥;即使长期私钥泄漏也无法解密历史流量,是 TLS 1.3 的强制要求。
国密算法体系与标准对照
国密算法家族包含公开算法(SM2/SM3/SM4/SM9/ZUC)与硬件算法(SM1),在金融、政务与电信领域有明确的配套标准与产品认证要求。
IV 与 nonce 的正确用法
初始化向量决定同一密钥下加密结果的随机性:CBC 要求随机且不可预测,CTR/GCM 要求同一密钥下唯一;理解差异可避免密钥流量用。
bcrypt 口令散列
基于 Blowfish 密钥编排的自适应散列,cost 因子每加 1 计算量翻倍;在 Unix 口令与 Web 应用中使用广泛,注意 72 字节输入上限。
后量子密码(PQC)迁移概览
NIST 于 2024 年发布 FIPS 203/204/205 三项后量子标准;TLS 生态通过混合密钥交换先行过渡,长期保密数据需要尽早评估迁移。
RSA 加密长度限制与混合加密
RSA 只能加密小于模数的数据:2048 位密钥配 OAEP+SHA-256 的明文上限约 190 字节;实际系统用 RSA 包装随机对称密钥(信封加密)。
DH 参数安全与 Logjam 教训
2015 年公开的 Logjam 研究表明大量服务共用弱 DH 参数可被降级与预计算;修复方向是 2048 位以上参数并使用标准组。
SHA-3(Keccak)海绵结构哈希
FIPS 202 定义的哈希家族:SHA3-224/256/384/512 采用海绵结构,与 SHA-2 的迭代结构不同,天然不受长度扩展攻击影响。
编码、加密与哈希的区别
三者常被混为一谈:编码是数据表示转换(可逆无密钥),加密提供机密性(可逆需密钥),哈希是单向摘要(不可逆),用途完全不同。
AES-XTS 磁盘加密模式
为块设备设计的可调(tweakable)模式(NIST SP 800-38E / IEEE 1619):以扇区号为 tweak,同一明文在不同扇区得到不同密文,是 LUKS 等全盘加密的常用选择。
GCM nonce 重用的后果
同一密钥下重复使用 nonce,会让两条消息的密钥流量用并暴露认证子密钥,从而可以伪造消息;这是 GCM 使用中的主要实现风险。
HKDF 密钥派生(RFC 5869)
两阶段通用 KDF:先从输入提取伪随机密钥(Extract),再按上下文标签扩展出多个子密钥(Expand);TLS 1.3 用它派生握手与记录层全部密钥。
RSA-PSS 概率签名
RFC 8017 §8.1 定义的概率签名方案:签名前引入随机盐,安全性有可证明的界;TLS 1.3 与代码签名场景推荐使用。
Diffie-Hellman 密钥交换
最早的公开密钥协商方案:双方在公开信道上交换幂值,各自计算出相同的共享秘密;TLS 中配合标准参数组(RFC 7919)使用。
Base64URL 编码
URL 安全变体:用 - 与 _ 替换 + 与 /,通常省略 = 填充;用于 JWT、OAuth 参数与文件名等场景。
常用椭圆曲线选择
主流曲线在安全强度、性能与生态支持上各有定位:P-256/X25519 满足 128 位强度且兼容性好,SM2 面向国密合规,secp256k1 主要用于区块链。
RC4 流密码(禁止在 TLS 中使用)
曾广泛用于 SSL/TLS 与 WEP 的流密码,密钥调度存在统计偏差,已出现多种实用攻击;RFC 7465 明确禁止在 TLS 中使用 RC4 套件。
ChaCha20 流密码
RFC 8439 定义的流密码:256 位密钥、96 位 nonce、32 位计数器、20 轮 ARX 运算,软件实现性能好,在无 AES 硬件加速的移动与嵌入式设备上有优势。
scrypt 内存硬 KDF
RFC 7914 定义的内存硬派生函数,参数 N/r/p 控制内存与计算成本,提高 GPU 与专用硬件并行爆破的门槛,用于口令存储与文件加密。
口令加盐(Salt)
为每个口令生成唯一随机值并随散列存储,使相同口令得到不同散列,抵御彩虹表与批量比对;盐不是密钥,无需保密但要唯一。
安全强度对照与密钥长度换算
不同算法族达到同等安全强度所需长度不同(NIST SP 800-57):128 位安全强度对应 AES-128、RSA-3072、ECC P-256 与 SHA-256(抗碰撞)。
RSA PKCS#1 v1.5 填充(历史方案)
最早的 RSA 填充方案(RFC 8017 §7.2 / §9.2),加密与签名通用;作为加密方案已不推荐,作为签名方案在兼容场景仍有使用。
HMAC 与「哈希拼接密钥」的区别
直接用 H(key || message) 校验消息存在长度扩展风险;HMAC 的双层结构(ipad/opad)避免了该问题,是标准的密钥化哈希构造。
十六进制编码
把每个字节表示为两个十六进制字符:密钥、散列、随机数与抓包内容普遍以 hex 展示;解析时注意大小写与长度校验。
SM2 签名流程与 ZA 值
SM2 签名在标准哈希过程中引入 ZA(用户标识与公钥的杂凑值),再对消息摘要签名;用户标识默认值为 1234567812345678,双端不一致会导致验签失败。
非对称密钥对生成要点
生成密钥对时需关注随机源质量、密钥长度、用途分离与私钥保护;生成后立即校验并纳入权限、备份与轮换流程。
密钥派生函数(KDF)
从口令、共享秘密或主密钥派生用途分离的子密钥:口令类用 PBKDF2/scrypt/Argon2,通用类用 HKDF 或 NIST SP 800-108 系 KDF。
分组密码工作模式对照
同一分组算法配不同模式,属性差别很大:是否需要 IV、能否并行、是否自带认证,直接决定适用场景与风险。
密钥交换方式对照
常见密钥交换/传输方式在安全性、前向保密与部署成本上差异明显:RSA 密钥传输已退出舞台,(EC)DHE 与 PSK 是当前主力,KEM 用于后量子过渡。
AES-CCM 认证加密模式
基于 CTR 加密与 CBC-MAC 认证的组合模式(NIST SP 800-38C / RFC 3610),在无线与物联网协议中使用广泛,实现简单且只需 AES 一种分组运算。
PKCS#7 填充规则
分组模式对不足一整块的数据补齐规则:填充字节的值等于填充长度,数据正好对齐时追加一整块,TLS 1.0-1.2 的 CBC 套件使用该规则。
CRC 与密码学哈希的区别
CRC 用于检测传输或存储错误,线性结构便于硬件实现但不具备抗碰撞性;SHA-2/SHA-3 等密码学哈希用于安全完整性,两者用途不能互换。
ML-KEM 密钥封装(FIPS 203)
基于模块格难题的密钥封装机制(源自 Kyber),通过 encaps/decaps 交换 32 字节共享秘密;TLS 1.3 中通常与 X25519 组成混合组使用。
ECDSA 随机数 k 的安全要求
ECDSA 签名依赖一次性随机数 k:k 重复或可预测即可从两个签名中恢复私钥;工程上推荐 RFC 6979 的确定性 k 或使用成熟库。
碰撞、前像与第二前像
密码学哈希的三类安全性目标:抗前像、抗第二前像与抗碰撞;签名场景最依赖抗碰撞,口令散列最依赖抗前像与计算成本。
分组密码与流密码的差异
分组密码按固定长度块处理数据、通常需要填充;流密码按位或字节生成密钥流与明文异或。二者的错误传播、并行能力与完整性设计不同。
EdDSA 家族与 ECDSA 的差异
EdDSA(Ed25519/Ed448)与 ECDSA 都基于椭圆曲线,但签名生成方式、编码与容错性不同:EdDSA 确定性签名、编码固定,实现更不易误用。
BLAKE2 哈希函数
RFC 7693 定义的哈希家族:BLAKE2b 面向 64 位平台、BLAKE2s 面向 32 位平台;内置密钥化与可调输出长度,速度优于同类通用哈希。
SM2 公钥加密与 C1C2C3 结构
SM2 加密输出由 C1(曲线点)、C2(密文)与 C3(SM3 摘要)组成;不同标准版本与实现的拼接顺序不同,是国密对接中的常见故障点。
Blowfish 与其衍生用法
1993 年发布的 64 位分组密码:密钥 32-448 位、16 轮 Feistel;因分组偏小不再用于新协议,但其密钥编排被 bcrypt 口令散列沿用。
MAC 与加密的组合方式(MtE/EtM/AEAD)
认证与加密的三种组合安全性不同:先加密后 MAC(Encrypt-then-MAC)优于 MAC-then-Encrypt;TLS 1.3 直接使用 AEAD 消除组合问题。
Unix 口令散列格式(crypt 前缀)
类 Unix 系统的 crypt 散列字符串以 $id$ 前缀标识算法:$1$ MD5、$5$ SHA-256、$6$ SHA-512、$y$ yescrypt、$2b$ bcrypt,识别前缀即可判断强度与迁移方向。
ML-DSA 与 SLH-DSA 后量子签名
FIPS 204(ML-DSA,源自 Dilithium)与 FIPS 205(SLH-DSA,源自 SPHINCS+)构成后量子签名标准:前者签名较小、通用性强,后者基于哈希假设更保守但签名更大。
长度扩展与哈希构造选择
对 Merkle–Damgård 类哈希(MD5/SHA-1/SHA-2),在只知道 H(secret||msg) 与长度时可推导出更长消息的摘要;HMAC 与 SHA-3/BLAKE2 不受影响。
SM2 与 ECDSA 对比
两者都基于椭圆曲线,但曲线参数、签名公式与标准体系不同:SM2 引入 ZA 标识杂凑、使用国密标准,ECDSA 遵循 FIPS/SEC 体系。
AES 的 CFB 与 OFB 流式模式
两种把分组密码当流密码用的历史模式:CFB 反馈密文、OFB 反馈加密输出;见于早期协议与个别文件格式,新协议中使用减少。
CMAC 消息认证码
基于分组密码的消息认证码(NIST SP 800-38B / RFC 4493):用 AES 生成定长认证标签,硬件实现简单,适合受限设备与部分金融协议。
Poly1305 一次性认证码
RFC 8439 定义的认证算法:使用 32 字节一次性密钥对消息生成 16 字节标签,通常与 ChaCha20 组合为 AEAD 使用。
格式保留加密(FPE)
在加密同时保持数据格式与长度(如 16 位卡号、11 位手机号),NIST SP 800-38G 定义 FF1 与 FF3-1 方案;密文可直接落库,通常无需改表结构。
SHAKE 可扩展输出函数(XOF)
FIPS 202 中的 SHAKE128/SHAKE256:可按需要输出任意长度,用于哈希到指定长度、后量子算法内部扩展与随机字节派生。
生日界与摘要长度选择
n 位摘要的碰撞搜索工作量约为 2^(n/2):128 位摘要约 2^64 次即可找到碰撞,这就是新系统摘要长度普遍选择 256 位的原因。
URL 编码(百分号编码)
RFC 3986 定义的百分号编码:把保留字符与非 ASCII 字符转为 %XX 形式;参数拼接与签名串构造中高频踩坑来源之一。
Camellia 分组密码
RFC 3713 定义的 128 位分组密码,密钥 128/192/256 位对应 18/24 轮 Feistel 结构,日本 NTT 与三菱联合设计,TLS 与部分密码产品中有可选套件。
SM1 算法(硬件实现)
国密对称密码算法之一,算法细节不公开,以芯片或 IP 核形式提供,主要用于金融 IC 卡、安全模块等硬件场景,软件库一般无法直接调用。
SM9 标识密码(IBC)
GM/T 0044 定义的标识密码算法:以用户标识(邮箱、手机号等)作为公钥,免除证书分发,包含签名、加密与密钥交换三部分;私钥由 KGC 生成。
RSA 私钥参数与 CRT 加速
RSA 私钥除模数与指数外还包含 p、q、dP、dQ、qInv 等 CRT 参数;使用中国剩余定理可把私钥运算提速约数倍,HSM 内部普遍采用。
哈希截断与指纹长度
把摘要截断使用会按位削弱强度:截断到 n 位后抗碰撞约 n/2、抗前像约 n 位;证书指纹、消息 ID 等场景需要明确长度约定。
Base32 编码
RFC 4648 定义的编码:每 5 字节编码为 8 个字符,字符集为 A-Z 与 2-7;比 Base64 更长但字符集更易人工抄写与避免混淆。
Feistel 结构与 SPN 结构
分组密码的两大构造方式:Feistel 网络(DES/3DES/Blowfish/Camellia)加解密共用轮函数;SPN 置换网络(AES/SM4)每轮由可逆 S 盒与线性层组成。
DSA 数字签名算法(已退场)
FIPS 186 系列早期的签名算法:基于有限域离散对数,签名长度固定 40-64 字节左右;FIPS 186-5 已不再包含 DSA,新系统不应选用。
BLAKE3 树结构哈希
基于 Merkle 树与 BLAKE2s 压缩的并行哈希,支持多线程、可扩展输出与 keyed 模式;规范由 BLAKE3 项目维护,未被 NIST 标准化。
雪崩效应与扩散性
输入改变 1 比特应导致输出约一半比特变化(严格雪崩准则);这是分组密码与哈希设计的检验指标,也常用于验证第三方实现的正确性。
ZUC 祖冲之序列密码
国密流密码标准(GM/T 0001):由 LFSR、比特重组与非线性函数 F 组成,用于移动通信的 128-EEA3 加密与 128-EIA3 完整性算法。
TLS 与 HTTPS
握手过程、版本与套件、服务端配置基线
TLS 传输层安全协议总览热门
在 TCP 之上提供机密性、完整性与身份认证的协议,当前主流版本为 TLS 1.2(RFC 5246)与 TLS 1.3(RFC 8446);HTTPS 即 HTTP over TLS。
TLS 1.3 特性与变化热门
RFC 8446 定义的现代版本:1-RTT 握手、强制前向保密的 (EC)DHE、只保留 AEAD 套件,移除静态 RSA、CBC、压缩与重协商。
TLS 1.2 与 1.3 握手差异对照
两代协议在握手轮次、密钥交换、套件结构与加密范围上差异明显:TLS 1.3 更简洁且安全属性更强,但兼容性与抓包可见性不同。
nginx TLS 服务端基线配置
一套可直接采用的 nginx HTTPS 基线:协议限 1.2/1.3、套件只保留 ECDHE 与 AEAD 组合、会话缓存与证书配置齐全,并配合 HSTS 与 OCSP 形成完整能力。
TLS 1.2 及配置要点
2008 年发布的版本(RFC 5246),支持 RSA 密钥传输、CBC 与 GCM 套件、会话恢复与重协商;存量系统仍广泛使用,配置重点是排除弱算法。
SSL/TLS 版本历史与弃用时间线
从 SSL 2.0 到 TLS 1.3 的演进中,多个版本因算法缺陷被淘汰:SSL 3.0 因 POODLE 弃用,TLS 1.0/1.1 于 2021 年被 RFC 8996 正式弃用。
SNI 服务器名称指示
RFC 6066 定义的扩展:客户端在 ClientHello 中以明文告知目标主机名,服务端据此选择证书与虚拟主机;缺少 SNI 时会落到默认站点。
HSTS 严格传输安全响应头(Strict-Transport-Security)
服务端通过响应头声明在未来一段时间内只允许 HTTPS 访问(可选覆盖子域),浏览器据此把站内 HTTP 链接自动改写为 HTTPS,用于防降级与 Cookie 泄露。
openssl s_client 检查清单
s_client 是排查 TLS 的常用工具:可指定版本与 SNI、打印证书链、执行校验并请求 OCSP,几分钟内确认服务端安全配置的实际协商结果。
TLS 1.3 握手流程(1-RTT)
TLS 1.3 把密钥交换压缩到一次往返:ClientHello 直接携带 key_share,服务端回 ServerHello 即可计算握手密钥,随后在加密信道中发送证书与 Finished。
密码套件命名与解读
TLS 1.2 套件名按「密钥交换 + 认证 + 加密算法 + 模式 + PRF」组合命名(如 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256);TLS 1.3 套件名只保留算法部分。
HTTP 到 HTTPS 跳转配置
在 80 端口用 301/308 重定向到 HTTPS,是启用 TLS 后的基础动作;要点是保留 Host 与完整 URI,并在有前置代理时避免跳转循环。
TLS 1.2 套件选择与配置
TLS 1.2 套件繁多,配置原则是:优先 ECDHE(前向保密)、AEAD(GCM/ChaCha20)、SHA-256 及以上,禁用 CBC/3DES/RC4/匿名套件。
双向 TLS(mTLS)
服务端除出示证书外还要求客户端提供证书并校验其链与吊销状态,用于内部服务、设备接入与零信任场景;配置时需要客户端 CA 信任链。
nginx 证书链文件组织与加载
nginx 的 ssl_certificate 指向的 PEM 需按服务器证书在前、中间证书在后的顺序拼接;私钥单独存放。链顺序与文件权限是部署后首先要确认的两件事。
TLS 1.2 完整握手流程
TLS 1.2 完整握手需要 2-RTT:客户端与服务端交换随机数、协商套件、验证证书并用密钥交换算法协商主密钥,最后切换加密并校验 Finished。
curl 验证 HTTPS 行为
从客户端视角验证证书校验结果、协商版本、重定向链与 HTTP 版本;--resolve 可在 DNS 未生效时直连指定 IP,同时保持正确 SNI 与域名校验。
OCSP Stapling(OCSP 装订)配置
由服务端代替客户端查询证书吊销状态,并把带时间戳的 OCSP 响应缓存在握手中下发,可减少客户端直连 OCSP 的延迟与隐私暴露。
ALPN 应用层协议协商
RFC 7301 定义的扩展:在 TLS 握手中协商应用层协议(如 h2、http/1.1),避免额外往返;HTTP/2 强制使用 ALPN。
TLS 会话恢复机制
通过 Session ID(服务端保存状态)或 Session Ticket(RFC 5077,客户端保存加密票据)跳过完整握手;TLS 1.3 统一为 PSK 恢复模式。
TLS 1.3 密码套件集
TLS 1.3 共定义 5 个套件:3 个常用(AES-128-GCM、AES-256-GCM、ChaCha20-Poly1305)与 2 个面向受限环境的 CCM 套件。
HTTPS 常用安全响应头组合
与 HTTPS 搭配的若干响应头:HSTS、X-Content-Type-Options、Referrer-Policy、X-Frame-Options 与 Permissions-Policy,用于降低降级、嗅探与点击劫持等风险。
QUIC 协议要点(HTTP/3 传输层)
QUIC 是基于 UDP 的通用传输协议,把 TLS 1.3 集成进握手(默认全程加密),提供 0-RTT/1-RTT 建连、无队头阻塞的多路复用与连接迁移;HTTP/3 运行在 QUIC 之上。
TLS 1.3 0-RTT 与会话重放风险
0-RTT 允许客户端在首个飞行就发送应用数据(early data),降低延迟;但早数据可被重放,只适合幂等请求。
testssl.sh 批量检测与结果解读
开源脚本对目标做协议、套件、证书与常见缺陷条目的扫描,按 OK/INFO/WARN/CRITICAL 分级输出,适合上线前基线与变更后复查。
TLS 终止点与转发策略
TLS 在哪一跳结束决定后续链路是否加密:常见做法是边缘(负载均衡/CDN)终止后内网明文,或保持端到端加密只做透传;两者在合规、排障与证书管理上思路不同。
混合内容(Mixed Content)处理
HTTPS 页面引用 HTTP 子资源时会被浏览器拦截或警告:脚本、样式等 active 内容直接阻断,图片等 passive 内容可能被升级或降级提示。
套件选择与服务端偏好
TLS 1.2 由客户端提交套件列表、服务端可配置优先级;TLS 1.3 固定使用少数 AEAD 套件,且顺序由客户端偏好决定,服务端无法自定义组合。
会话票据密钥管理
会话票据密钥用于加密/认证票据;nginx 通过 ssl_session_ticket_key 加载 48 字节密钥文件(16 字节名称 + 16 字节 HMAC 密钥 + 16 字节 AES 密钥),需按周期轮换。
HSTS Preload 预加载列表
把域名提交到浏览器内置的 HSTS 预加载列表,使首次访问也直接走 HTTPS;进入需要满足 max-age、includeSubDomains、preload 三个条件,撤销周期较长。
TLS 版本与客户端兼容性
规划协议版本先看客户端支持面:主流浏览器与近年运行时都支持 TLS 1.3,存量 Java、Android 与嵌入式设备可能停留在 1.2 甚至更低,需要按实际流量数据决策。
nginx TLS 日志字段
在 nginx 访问日志中加入 $ssl_protocol、$ssl_cipher 等变量,可按协议版本与套件统计分布,为下线旧协议与兼容性排查提供数据依据。
关闭通知(close_notify)与截断防护
TLS 规范要求正常结束会话前发送 close_notify 警报;对端未收到就断开时,应用可能把被截断的数据当成完整数据,HTTP 层靠长度校验与分块编码共同兜底。
读懂 ClientHello 消息
ClientHello 是客户端发起握手的首条消息,包含版本、随机数、会话 ID、套件列表与扩展(SNI、ALPN、supported_groups、key_share 等),是定位握手失败的主要现场。
TLS 抓包分析入门
抓包定位 TLS 问题:用过滤条件观察握手消息、证书与警报;需要解密时通过客户端密钥日志(SSLKEYLOGFILE)配合分析工具,服务端私钥无法解密 ECDHE/TLS 1.3 会话。
SNI 与默认站点不匹配
客户端(健康检查、旧库)未发送 SNI 时会命中 nginx 的 default_server,返回与目标域名不符的证书;分别带与不带 -servername 探测并对比证书主体即可定位。
TLS 1.3 密钥调度与密钥更新
TLS 1.3 用 HKDF 分阶段派生密钥:Early Secret、Handshake Secret、Master Secret,并分别导出客户端/服务端方向的流量密钥;KeyUpdate 用于在线更新。
HTTP/3 与 Alt-Svc 通告
服务端用 Alt-Svc 响应头(或 HTTPS DNS 记录)通告 HTTP/3 端点,客户端缓存后尝试 QUIC;没有通告时即使服务端支持 QUIC,客户端也可能不会尝试。
CBC 套件退场与 MAC-then-Encrypt 风险
TLS 1.2 的 CBC 套件因填充与时序问题反复出现攻击(如 Lucky13、POODLE),运维做法是只保留 AEAD 套件,并把协议基线保持在 1.2 及以上。
多实例环境下的会话恢复一致性
集群里会话票据密钥或缓存不共享时,同一客户端从不同实例恢复会失败并回退完整握手,表现为随机变慢;解决方式是共享票据密钥或集中缓存。
应用内 TLS 校验失败排查
语言运行时各自使用独立信任库(Python 的 certifi、Node 的 NODE_EXTRA_CA_CERTS、Java 的 trustStore、Go 依赖系统池),系统层更新证书后应用仍可能失败;先确认应用使用的信任库路径,再核对链与域名。
双向认证(mTLS)排错
mTLS 失败集中在三处:客户端证书缺失或过期、服务端未信任其签发者、证书缺少 clientAuth 用途;用 s_client 携带客户端证书复现,可定位到服务端配置或客户端材料问题。
TLS 重协商与安全缓解
TLS 1.2 允许握手完成后重新协商参数(含客户端发起);历史上出现过前缀注入类问题,现代实现默认启用 RFC 5746 安全重协商,TLS 1.3 则彻底取消了重协商。
TLS 1.3 后量子混合密钥交换
主流厂商开始在 TLS 1.3 中部署混合密钥交换(传统曲线与 ML-KEM 组合),用两套算法同时协商,抵御先存后解型长期风险,并保持对旧客户端的兼容。
HTTP/2 启用与排查
浏览器中的 HTTP/2 通过 ALPN 协商(h2),排查先确认服务端启用且协商成功,再检查回源链路与代理是否降级为 HTTP/1.1。
会话复用不生效排查
会话复用能省去完整握手;不生效时先确认服务端启用缓存或票据,再用 s_client 两次连接对比是否出现 Reused 标记,并排查多节点票据密钥不一致的问题。
TLS 压缩与 CRIME 类风险
TLS 层压缩(DEFLATE)会因压缩率随明文变化而泄露信息,CRIME 类攻击即由此而来;TLS 1.3 已移除压缩,1.2 也应保持禁用。
端到端加密与传输加密的区别
传输加密(TLS)保护两跳之间的链路,链路上的中间节点在各自区间内可见明文;端到端加密保护通信两端之间的内容,中间服务器也无法读取。
TLS 评级工具结果解读
SSL Labs、testssl.sh、sslyze 等工具依据协议版本、套件强度、证书与 HSTS 计算评级;评级是配置线索而非目标,解读时应聚焦报出的具体问题并逐项修复。
套件协商失败排查
报 no shared cipher 或 handshake failure 说明客户端与服务端没有共同套件:TLS 1.2 用 -cipher 指定组合、TLS 1.3 用 -ciphersuites 指定,可分别验证版本与套件层面的交集。
TLS 告警码对照
握手失败时抓包或日志会给出 Alert 编号:certificate_expired 指向有效期、unknown_ca 指向信任链、handshake_failure 多为套件或参数不匹配,按码分诊可快速缩小范围。
TLS 记录层格式与分片
记录层把上层数据切成记录传输:每条约 5 字节头(内容类型、版本、长度)加上载荷;单条记录明文上限 16KB,应用数据会被拆成多条记录发送。
TLS/HTTPS 关键 RFC 索引
排障与实现时按编号查原文:协议核心、扩展(SNI/ALPN/会话票据)、吊销与日志(OCSP/CT)、传输(QUIC/HTTP3)各自对应不同文档。
TLS 延迟优化要点
TLS 首连延迟由网络往返、证书体积与吊销查询共同决定:TLS 1.3 把完整握手压缩到 1-RTT,会话复用与 OCSP 装订减少额外往返,证书链瘦身缩短传输时间;用 curl 分阶段计时量化效果。
HelloRetryRequest(TLS 1.3 重试机制)
当客户端 key_share 未覆盖服务端偏好的组时,服务端先回 HelloRetryRequest 要求换组,客户端再发一次 ClientHello,会额外增加一个半往返。
版本降级与降级攻击防护
中间人可以篡改握手中的版本信息,诱导连接落在更弱的协议上;防护手段包括服务端只启用高版本、客户端在降级重试时声明意图(TLS_FALLBACK_SCSV),以及 TLS 1.3 内置的降级检测。
TLS 流量长度泄露与填充缓解
即使内容加密,记录长度仍可能泄露明文规模信息(如页面大小指纹);TLS 1.3 允许在应用数据记录内填充、HTTP/2 提供填充帧,用于削弱此类分析。
证书压缩(RFC 8879)
在握手时对证书链做无损压缩(zlib/brotli/zstd 等编码),减少大证书链的握手流量与延迟;需客户端与服务端同时声明支持才会启用。
加密客户端问候(ECH)
ECH(Encrypted Client Hello)把包含 SNI 的敏感握手字段整体加密,只有部署了对应密钥的服务端与客户端能解密,用于降低按域名进行流量分析的可行性;依赖 DNS 的 HTTPS 记录提供配置。
DANE 与 TLSA 记录
DANE 通过 DNSSEC 把证书或公钥指纹发布在 DNS 的 TLSA 记录中,让客户端可以不依赖 CA 体系校验服务端证书;前提是域名启用 DNSSEC 且解析链可信。
证书与 PKI
证书链、签发流程、格式转换与 CA 体系
CSR 证书签名请求生成
CSR(PKCS#10)包含申请者公钥与身份信息,并用对应私钥签名证明持有权;CA 验证信息后据此签发证书,CN 与 SAN 是填写时的关键字段。
X.509 证书结构(v3)
证书是 CA 对公钥与身份绑定关系的签名文件;X.509 v3 包含版本、序列号、签发者、有效期、主体、公钥与扩展,几乎所有 TLS 证书都使用该结构。
ACME 协议与 Let's Encrypt 签发
ACME(RFC 8555)用自动化方式完成域名验证与签发:账号密钥、订单、HTTP-01/DNS-01/TLS-ALPN-01 挑战、CSR 提交与证书下载;Let's Encrypt 是广泛使用的公共实现。
证书链的组成与验证顺序
一条链通常为根证书到中间证书再到服务器证书;客户端从服务端提供的链出发,逐级用签发者公钥验证签名,直到命中本地信任库中的根证书。
PEM 与 DER 格式
PEM 是 Base64 文本(带 BEGIN/END 标记),DER 是二进制 ASN.1 编码;两者内容等价、可互转。Linux 系常见 PEM,Windows 组件与部分接口偏好 DER。
certbot 实战:签发与续期
certbot 是常用 ACME 客户端:支持 nginx/apache 插件自动配置,也支持 webroot 与手动模式;续期由定时任务或 systemd timer 触发。
X.509 常用扩展速查
扩展决定证书的用途边界:basicConstraints 标识 CA、KeyUsage 限定密钥用途、EKU 限定场景、SAN 承载域名、AIA 提供链与吊销信息、CRLDP 指向吊销列表。
通配符证书的匹配规则
通配符证书(*.example.com)只覆盖同一级子域:匹配 a.example.com 与 b.example.com,不匹配 example.com 本身,也不匹配 a.b.example.com;SAN 中可与普通域名混列。
PKCS#12(.pfx/.p12)容器
PKCS#12 把证书、私钥与中间链打包成单个加密文件,常用于 Windows/IIS、Tomcat、Java 与移动端分发;导入需要口令,且要注意新旧加密算法的兼容性。
自签证书的用途与边界
自签证书由自己签发自己,没有公共信任锚,浏览器会报不受信任;适合内网服务、开发调试与设备管理界面,面向公众的站点应使用受信 CA 证书。
证书有效期规则与缩短趋势
公开信任的 TLS 证书有效期被浏览器与 CA/Browser Forum 政策持续压缩:2020 年起上限 398 天,随后分阶段缩短;短有效期降低对吊销的依赖,但要求自动化续期。
证书格式转换速查(PEM/DER/PFX)
三类高频转换:PEM 与 DER 互转、PFX 与 PEM 互转、链与私钥的组合拆解;转换只改变编码与封装,不改变证书内容与私钥本身。
根 CA 与信任锚管理
根证书是信任链的起点(信任锚),自签且长期有效,被预置在操作系统、浏览器与运行时信任库中;其安全性依赖离线保管与严格的签发管控。
KeyUsage 与 EKU 的组合规则
KeyUsage 限制密钥能做什么(签名、加密、签发),EKU 限制证书用于什么场景(TLS 服务端、客户端、代码签名);两者叠加决定可用范围,配置不当会在特定客户端上失败。
用 CA 签发证书的流程
签发流程:提交 CSR → CA 验证域名或组织信息 → 生成序列号与扩展配置 → 用 CA 私钥签出证书;自建 PKI 用 openssl ca 或 x509 -req 完成,公共 CA 走 ACME 或控制台。
SAN 多域名与 IP 证书
SAN(subjectAltName)支持在同一张证书里列出多个 DNS 名与 IP 地址;使用 IP 访问的站点必须把 IP 放入 SAN,否则校验不过。名称数量受 CA 策略与证书体积约束。
续期窗口与提前量规划
证书续期应有明确提前量与执行窗口:常见做法是到期前 30 天自动续期、到期前 14 天人工兜底,并对续期失败单独告警;短有效期时代提前量要按签发周期调整。
中间 CA 的作用与约束
中间 CA 由根 CA 签发、承担日常签发任务,使根私钥可以离线保存;中间证书可能过期、被替换或被交叉签名,是链断裂排查的高频对象。
Java KeyStore(JKS 与 PKCS12)
Java 应用通过 KeyStore 管理证书与私钥:旧格式 JKS 为专有实现,Java 9 起默认 PKCS12;迁移用 keytool -importkeystore,应用配置指向 .jks 或 .p12 文件。
证书吊销机制总览(CRL/OCSP)
吊销用于让证书在到期前失效:CRL 是 CA 定期发布的吊销列表,OCSP 提供单证书状态查询;现代实践配合短有效期、OCSP Stapling 与浏览器自有名单降低吊销检查的可用性风险。
客户端信任库与根证书分发
每个客户端环境都有自己的信任库:Linux 用 ca-certificates、RHEL 系用 ca-trust、Windows 用证书管理器、Java 用 cacerts、容器镜像与语言运行时也各自内置;自建 CA 必须分发到全部相关环境。
acme.sh 客户端常用操作
轻量 ACME 客户端,纯 shell 实现,支持大量 DNS 服务商 API 自动验证;常见用法是签发后把证书安装到固定路径,并通过 reloadcmd 重载服务。
DV、OV、EV 证书类型说明
公共 CA 证书按验证深度分三档:DV 仅验证域名控制权、OV 验证组织信息、EV 做更严格的身份核验;浏览器地址栏已不再为 EV 展示特殊样式,选择依据应是合规与业务要求。
CA 层级设计(离线根实践)
常见三级结构:离线根 → 受控策略 CA → 在线签发 CA;也可能两级:根 + 签发。层级越多管控越细,链条与运维成本也越高,内部 PKI 常按环境拆分签发 CA。
公共 CA 与私有 CA 的选型
公共 CA 的证书默认被全球客户端信任,适合面向公众的服务;私有 CA 由组织自建,适合内网服务、设备与 mTLS,签发自由但需要自行分发信任并维护吊销体系。
证书固定(Pinning)的取舍
证书固定让客户端只信任预先内置的证书或公钥(SPKI),可抵御受信 CA 误签发;但轮换与应急成本高,Web 端 HPKP 已被废弃,移动 App 仍常用且必须准备备用固定。
证书透明(CT)与 SCT
证书透明要求公共 CA 把证书提交到公开日志,证书附带 SCT 证明(嵌入证书扩展、TLS 扩展或 OCSP 响应);浏览器据此发现误签发,是公共 PKI 的监督机制。
AIA 扩展与链补全
AIA(Authority Information Access)扩展包含 caIssuers(中间证书下载地址)与 OCSP 地址;部分客户端会在链缺失时按 caIssuers 自动补链,但很多移动端与库不会,因此不能依赖自动补链。
must-staple 扩展与装订强制
证书中带 TLS Feature 扩展声明 status_request 时,支持该扩展的客户端会要求服务端提供 OCSP 装订响应,否则拒绝连接;强度高于普通装订,但配置错误会直接导致不可用。
交叉签名与新旧根过渡
新根 CA 刚上线时未必进入所有客户端信任库,常见做法是用仍被信任的旧根为同一公钥再签一份中间证书(交叉签名),让新旧客户端都能完成校验。
OpenSSL 实战
密钥、CSR、自签、验证与格式转换高频命令
openssl x509 查看与转换证书
x509 是证书处理的多面手:查看字段与扩展、转换 PEM/DER、直接生成自签证书、按 CA 签发(-req);-ext 参数可单独读取某个扩展。
openssl req 生成 CSR 与自签证书
req 一个命令覆盖两类任务:生成 CSR(-new)与直接生成自签证书(-x509);配合 -addext 写入 SAN 等扩展,是证书申请与测试的高频入口。
openssl verify 链校验实战
verify 用于独立校验证书链:指定信任根与中间证书,输出 OK 或具体错误;-show_chain 展示验证路径,是排查链问题的直接工具。
openssl dgst 哈希与签名验签
dgst 计算摘要、HMAC 与数字签名:支持 SHA-2、SHA-3、SM3 等算法,-sign/-verify 直接对接私钥与公钥做签名验签。
openssl genpkey 生成各类私钥
genpkey 是 3.x 推荐的通用密钥生成入口:RSA、EC、Ed25519、X25519 都可用同一命令加 -algorithm 与 -pkeyopt 参数完成。
openssl s_client 进阶用法(mTLS 测试)
除常规连通检查外,s_client 可携带客户端证书做 mTLS 测试、限定套件与协议、通过 starttls 连接邮件服务,是验证服务端配置的通用客户端。
openssl genrsa 与迁移建议
genrsa 是传统 RSA 密钥生成命令,仍被大量脚本使用;OpenSSL 3 文档建议新场景改用 genpkey,两者生成的密钥格式一致。
openssl pkcs12 打包与拆解
pkcs12 命令负责 PKCS#12 容器的导出与解析:export 打包证书、私钥与链,-info/-nodes 解析查看;旧设备兼容需要 -legacy 与显式算法参数。
openssl version 与环境信息
确认本机 OpenSSL 版本、构建参数与配置目录是排障第一步:3.x 引入 provider 架构,算法可用性与默认安全策略都与 1.1.1 存在差异。
openssl rsa 查看与转换 RSA 密钥
rsa 命令用于读取、检查与转换 RSA 私钥:打印参数、导出公钥、去除口令、比对模数;3.x 中仍保留该命令作为兼容入口。
openssl ecparam 与曲线操作
ecparam 用于列举曲线与生成 EC 密钥(含 SM2 曲线名);3.x 下生成密钥也可用 genpkey,ecparam 仍常用于快速生成与查看曲线参数。
openssl rand 生成随机数据
rand 基于系统 CSPRNG 输出随机字节,常用于生成密钥材料、IV、盐与会话票据密钥;输出可行十六进制或 Base64 编码。
openssl pkcs8 私钥格式转换
PKCS#8 是通用私钥封装格式:不同算法(RSA/EC/Ed25519)采用统一结构,并支持标准口令加密;部分平台只接受 PKCS#8,需要从传统格式转换。
openssl ciphers 套件语义查询
ciphers 命令按表达式列举本机支持的 1.2 套件:可用于查看组合、验证白名单表达式是否合法,以及观察安全级别策略的影响。
openssl enc 对称加解密文件
enc 提供文件级对称加解密:AES-256-CBC 加 PBKDF2 是常见组合;解密需要完全相同的算法、迭代次数与口令来源。
openssl pkeyutl 原始密钥操作
pkeyutl 提供底层公钥运算:Raw 签名与验签(Ed25519 必须加 -rawin)、RSA 加密解密、密钥派生(-derive)等,适合与专用协议或测试向量对接。
openssl ca 搭建轻量 CA
openssl ca 基于配置文件与数据库(index.txt、serial)管理签发与吊销,适合内部测试 CA;生产自建 CA 通常改用带 HSM 与审计的完整方案。
openssl ec 处理 EC 密钥
ec 命令读取与转换 EC 私钥:查看曲线与公钥点、导出公钥、调整点编码形式;与 ecparam 配合覆盖生成到查看的完整流程。
openssl ocsp 查询吊销状态
ocsp 命令作为客户端向 OCSP 响应者查询单证书状态,也可用于解析装订响应;排障时常用来核对响应时间戳与状态,确认吊销链路是否工作。
openssl 口令来源管理(pass 语法)
OpenSSL 命令的 -passin/-passout 支持多种口令来源:pass: 明文(不推荐)、env: 环境变量、file: 文件、fd: 文件描述符;运维脚本应使用后三种以减少泄露面。
openssl crl 查看吊销列表
crl 命令读取与转换 CRL:查看签发者、生效与下次更新时间、被吊销序列号;也常用于把 DER 格式 CRL 转成 PEM 供服务端使用。
OpenSSL 3 provider 与 legacy 算法
3.x 用 provider 组织算法实现:default 提供现代算法,legacy 提供 DES、RC4、MD4 等旧算法;需要旧算法时必须显式加载 legacy provider。
openssl s_server 模拟服务端
s_server 在本地起一个 TLS 服务端用于验证客户端行为:测试客户端证书、套件协商与握手输出,-www 提供简单 HTTP 响应便于自动化验证。
openssl.cnf 配置文件结构
openssl.cnf 决定 req、ca 等命令的默认字段、扩展模板与数据库路径:理解 [req] 与 [v3_*] 段落,可让签名脚本可重复、字段一致。
openssl kdf 派生密钥(3.x)
3.x 提供 kdf 命令统一调用密钥派生函数:支持 HKDF、PBKDF2、TLS13-KDF 等;参数通过 -kdfopt 传入,适合与测试向量比对或生成中间材料。
openssl list 能力清单查询
list 命令枚举当前构建支持的对象:命令、摘要、密码算法、公钥算法、KEM 与 provider;核对与实现对接时先看这里,比翻文档更直接。
openssl dhparam 与 DHE 参数
dhparam 生成 DH 参数文件供有限域 DH(DHE)套件使用,生成耗时随位数增加;现代部署更倾向优先 ECDHE,需要 DHE 时使用 RFC 7919 定义的标准群。
openssl speed 性能基准
speed 对哈希、对称加密与非对称运算做基准测试,输出吞吐或每秒操作数;用于容量规划与算法选型的量级参考,结果依赖 CPU 与编译选项。
openssl ts 时间戳(RFC 3161)
ts 生成与校验 RFC 3161 时间戳请求与响应,用于代码签名与档案的「存在时间」证明;验证需要可信 TSA 证书链与原始请求数据。
openssl asn1parse 结构解析
asn1parse 按 ASN.1/DER 结构逐节点打印证书、密钥与 CSR 的编码内容,适合排查工具不认文件的问题(多段内容混排、格式损坏)。
证书运维排查
到期监控、链不完整、域名不匹配与吊销检查
链不完整(unable to get local issuer)
服务端只发送叶证书时,客户端报 unable to get local issuer certificate(verify error 20)。修复方式是把中间证书按顺序拼接后随叶证书一起下发,并用 s_client -showcerts 验证实际发送内容。
证书到期检查(openssl -checkend)
用 openssl x509 的 -enddate 与 -checkend 检查证书剩余有效期:-checkend 以秒为单位判断证书是否会在指定时间内到期,退出码可直接用于巡检脚本的告警分支。
域名不匹配排查
域名不匹配时浏览器报 NET::ERR_CERT_COMMON_NAME_INVALID,openssl verify 报 hostname mismatch(错误码 62)。核对证书 SAN 列表与请求使用的名称,并确认访问路径没有命中错误的默认站点。
浏览器证书错误对照与分诊
浏览器把校验失败归类为固定的 NET::ERR_CERT_* 错误码,可作为快速分诊线索:DATE_INVALID 指向时间、COMMON_NAME_INVALID 指向域名、AUTHORITY_INVALID 指向信任链,按码缩小范围再排查。
证书上线检查清单
证书轮换按固定清单执行可减少人为疏漏:材料校验、配置检查、灰度 reload、多节点复核、监控与记录更新,缺一不可。
证书到期监控接入
把证书到期检查做成计划任务并接入告警,覆盖域名探测、文件扫描与资产库对照三条路径;建议设置到期前 30/14/7 天的多级阈值,并记录每张证书的实际部署位置。
curl 证书校验失败排查
curl 校验失败时先读退出码与 -v 输出中的 subject/issuer,再判断属于链、域名还是信任库问题;-k 仅用于临时定位,不应留在脚本或配置里。
openssl verify 错误码对照
openssl verify 的 X509_V_ERR 编号是排错依据:9/10 是时间问题、18/19/20 是信任链问题、23 是吊销、62 是域名不匹配;结合 depth 提示可以确定断在链的哪一层。
弱签名算法排查
检查证书签名是否仍在用 SHA-1 或 MD5:公开 TLS 证书已不允许 SHA-1 签名,主流浏览器会拦截。用 x509 -text 查看 Signature Algorithm,并对链上每张证书分别检查。
证书续期失败排查
ACME 续期失败集中在三类:HTTP-01 挑战路径不可达、DNS-01 记录未生效或权限不足、以及限流与解析问题。按错误类型逐步验证挑战路径,比反复重试更有效。
证书与私钥匹配检查
部署前确认证书公钥与私钥匹配,可避免服务加载失败或握手错误:RSA 证书比对模数哈希,ECDSA/Ed25519 比对公钥导出结果的哈希。
证书链顺序与拼接检查
链文件顺序影响校验结果:叶证书必须在前,其后按签发关系由近到远排列中间证书;顺序错误或混入多余内容时,多数 TLS 库会报错或只取第一张证书。
自签证书在生产环境的处理
生产环境直接使用自签名证书会触发浏览器信任警告,应用端常见 self-signed certificate in certificate chain(错误码 19)。可行路径是自建私有 CA 签发并统一分发根证书,测试环境也建议走同一套信任体系。
nginx 证书路径与权限问题
nginx 启动或 reload 报 cannot load certificate / permission denied,多因路径写错、文件不存在或私钥权限不允许工作进程读取。核对路径、属主与 SELinux 状态即可定位。
HSTS 锁死与本地清理
HSTS 强制浏览器使用 HTTPS,一旦证书异常或 HTTPS 停服,在 max-age 有效期内无法通过点击继续访问;本地清理需删除该域名的 HSTS 策略后重试。
通配符证书范围排查
通配符证书 *.example.com 只匹配同一级子域,不匹配多级子域,也不默认包含裸域;签发前明确覆盖范围,或把缺失名称加入 SAN,避免上线后才发现不匹配。
OCSP 状态查询实操
OCSP 针对单张证书返回实时吊销状态:openssl ocsp 指定 issuer 与 URL 后获得 good / revoked / unknown 应答,应答本身带签名与时间窗口,需要一并校验。
Java 信任库排错(keytool)
Java 应用校验失败常见于 cacerts 缺少企业根或中间证书、未使用应用自带的 trustStore。用 keytool 检查服务端证书与信任库内容,配合 javax.net.debug 观察握手细节。
企业代理与 TLS 拦截识别
同一站点在某些网络下证书签发者变成企业 CA,说明流量经过受管终端的 TLS 拦截。识别方式是比对不同网络环境的 issuer 与链指纹,并检查本机是否安装了组织根证书。
s_client 校验行为与退出码
openssl s_client 默认在证书校验失败时仍打印握手信息并正常退出,容易造成能连上就没问题的误判;加 -verify_return_error 可让校验失败直接中止,便于脚本判断。
CRL 吊销检查实操
CRL 是 CA 定期发布的吊销列表;openssl verify -crl_check 在验证链的同时检查吊销状态,适合内网与私有 CA 场景,检查前需确认列表未过 nextUpdate。
中间证书过期排查
叶证书未到期但访问报错时,中间证书过期是常见原因:用 -showcerts 拉取完整链,逐张查看 notBefore/notAfter 即可确认断点。
系统时间与证书校验
证书校验依赖准确时钟,服务器时间漂移会同时引发 not yet valid 与 expired 两类看似矛盾的错误;用 chrony 或系统时间服务校时,并确认容器继承宿主时间,是排错的前置步骤。
HTTPS 重定向循环排查
当 CDN 或代理终止 TLS 而源站又按自身协议判断跳转 HTTPS 时,会出现重定向循环(ERR_TOO_MANY_REDIRECTS)。应根据 X-Forwarded-Proto 判断真实协议,并在边缘统一承担跳转。
续期错峰与失败告警
大量域名同时续期会触发 CA 限流并集中占用验证资源;将续期任务错峰执行、使用提前窗口,并对失败配置告警与重试,可以明显降低集中失败。
证书固定失效排查
启用证书固定的客户端在证书轮换后会握手失败:固定值仍是旧证书或旧公钥的指纹。排查关键是对比固定值与当前链的实际指纹,并规划多固定值与备份证书策略。
PEM 解析错误处理
PEM 解析报错(no start line / bad base64 decode)多因文件实际是 DER 编码、夹带其他文本或复制时丢失换行;先用 x509 试解析确认类型,再按格式转换处理。
证书尚未生效排查
报 certificate is not yet valid(错误码 9)多为服务器或客户端时钟漂移、签发时把本地时间误当 UTC 所致;校时并核对 notBefore 的 UTC 值即可定位。
密钥库别名问题排查
Java 服务报别名不存在或取到错误密钥,多因 keystore 中的别名与配置不一致(导入或转换后别名被改写)。用 keytool -list 查看实际别名,必要时用 -changealias 修正。
回源/后端 TLS 校验配置
反向代理到 HTTPS 上游时关闭证书校验会让回源流量可被中间人替换。正确做法是指定受信 CA 文件并开启校验,同时让 SNI 与上游证书 SAN 一致。
老客户端 TLS 兼容处理
停用 TLS 1.0/1.1 或 3DES 套件后,旧 Android、Windows 7 与嵌入式终端可能无法连接。合理路径是盘点客户端分布、为老设备提供独立入口与迁移时间表,而不是整体回退安全基线。
根证书过期与信任库更新
根证书过期会造成大范围校验失败;排查先确认客户端信任库中的根证书版本,再检查服务端链是否引用了已被替换的根。操作系统与语言运行时的信任库相互独立,需要分别核对。
OCSP Stapling 不生效排查
配置装订后用 s_client -status 验证是否真的返回装订响应;不生效的常见原因是缺少 resolver、缺少 ssl_trusted_certificate,或服务器访问不到 OCSP 端点。
通过 AIA 获取中间证书
证书缺少中间证书时,可先从 AIA 扩展的 caIssuers 地址下载对应中间证书,再与叶证书拼接为 fullchain;AIA 下载属于补救手段,正式部署仍应随证书提供完整链。
证书与私钥备份恢复
证书恢复流程要同时覆盖证书文件、私钥、链与部署配置;定期做恢复演练可以验证备份可用;备份内容按敏感资产保护,加密存储并限制访问。
中间证书新旧混用排查
同一域名的不同节点部署了不同批次中间证书时,会出现部分客户端正常、部分报错的随机现象。统一 fullchain 版本并逐出口抓取实际链进行指纹比对,是定位的关键。
CT 日志监控异常签发
证书透明日志公开记录公开信任证书的签发信息,可用 crt.sh 等入口查询自己域名的记录,发现未授权签发与影子资产,并据此决定是否吊销与排查私钥泄露。
IP 访问与 SAN 不匹配
直接用 IP 访问 HTTPS 时,证书必须包含 iPAddress 类型的 SAN 才能匹配;只有 DNS 名称的证书在所有客户端都会报域名不匹配,这是内网与设备调试场景的常见问题。
证书资产盘点
证书资产盘点记录域名、SAN、签发者、有效期、部署位置与责任人,是到期监控与轮换计划的基础;盘点范围应覆盖公网证书、内部服务与 mTLS 客户端证书。
加密私钥加载失败处理
私钥带口令时常驻服务无法交互输入,nginx 会在启动时报 cannot load private key / bad decrypt;可选路径是解密后严格限制权限,或使用服务支持的密码文件机制。
证书吊销流程(运营视角)
证书吊销是流程而非单条命令:确认泄露或误签发后,先提交吊销申请、评估传播延迟,再同步替换证书并核对依赖方(证书固定、白名单、信任库)。全过程保留记录以备审计。
证书链体积与握手开销
服务端发送的链越长、证书越大,握手数据量越高,对移动网络首连延迟影响越明显。控制链长度、不下发根证书、优先 ECC 证书,都能减少传输量。
OCSP 软失败与容错设计
OCSP 查询默认软失败:查不到应答时多数客户端继续连接,这意味着吊销传播存在延迟。运维上既要接受这一现实,也要避免把查询失败直接当作证书无效。
服务加载错误证书排查
同一台服务器部署多站点时,容易出现某站点引用了其他站点证书(复制配置漏改路径),表现为访问该站点返回别的域名证书;按 SNI 逐站点探测即可确认。
HSTS preload 移除流程
已进入 preload 列表的域名只能通过官方渠道申请移除:在 hstspreload.org 提交 removal 请求,同时停止发送 preload 参数并下调 max-age,等待浏览器版本更新生效。
多 CDN 与多节点证书同步
同一域名接入多个 CDN 或自建多套边缘节点时,证书必须在所有出口保持同步轮换,否则会出现按网络环境随机失败的现象;逐出口探测是验证手段。
s_client 挂起与超时控制
openssl s_client 直连后长时间不退出,是因为它保持交互等待标准输入;脚本中应重定向 stdin 或限制运行时间,避免巡检任务卡死。
证书文件完整性校验
证书与私钥经网络分发或第三方交付时,用哈希核对文件完整性可以识别传输损坏或被替换;SHA-256 为通用选择,与交付方公布的摘要比对即可。
用序列号定位节点证书差异
序列号是证书在签发 CA 内的唯一标识,比较各节点所提供证书的 serial 可以判断是否有节点仍在使用旧证书,是做替换复核的常用手段。
密钥管理
密钥存储、轮换策略与 KMS/HSM 概念
密钥轮换策略
密钥轮换按周期或事件触发更换密钥材料:协议与证书私钥随证书更换,数据加密密钥需要版本化并保留旧密钥用于历史数据解密;轮换计划要包含兼容期与回滚方案。
私钥文件权限基线
私钥在主机上的可读范围由文件权限与属主决定:通常文件 600、目录 700/750,属主为部署账号或服务账号;容器场景用只读挂载,避免私钥进入镜像层。
私钥保护层次
私钥保护由多层控制叠加:存储权限、静态加密(口令或 KMS/HSM)、主机与进程隔离、访问审计与轮换周期;任一层的缺失都会明显削弱整体强度。
KMS 密钥管理服务
密钥管理服务(KMS)集中完成密钥的创建、授权与审计,业务通过 API 请求加解密或签名,密钥材料不离开服务边界;适合集中治理,但要评估可用性、配额与调用延迟。
SSH 密钥管理
SSH 密钥用于登录与自动化:私钥通常放 ~/.ssh 且权限 600,authorized_keys 600、目录 700;按用途生成独立密钥并定期轮换,禁用密码登录前先验证密钥渠道可用。
HSM 硬件安全模块
硬件安全模块(HSM)在专用设备内生成并保护密钥,密钥不出设备,签名与解密在设备内完成;适用于根 CA、代码签名与合规要求较高的场景。
凭据管理平台
凭据管理平台集中存储密钥、口令与 Token,提供动态签发、租期与审计能力,避免凭据散落在配置文件与代码中;接入前要设计应用身份与最小授权。
证书密钥零停机轮换
零停机轮换让新旧证书在过渡期内都可用:先把新材料部署到全部节点并逐点验证,再灰度切换流量与 reload,确认无误后下架旧材料,全程保留回滚路径。
密钥生命周期管理
密钥生命周期覆盖生成、分发、使用、轮换、归档与销毁,每个阶段都应有责任人、系统记录与审批点,避免出现无主密钥与超期密钥。
信封加密(KEK/DEK)
信封加密用数据密钥(DEK)加密数据、用主密钥(KEK,存放于 KMS/HSM)加密数据密钥:批量数据无需逐块调用 KMS,同时保持集中治理与版本化能力。
代码库密钥扫描
在提交前与 CI 中加入密钥扫描(gitleaks、trufflehog 等),拦截私钥、Token 与口令进入仓库;一旦推送到远端即视为泄露,删除文件不能撤销,应直接轮换。
密钥备份与恢复
密钥备份要覆盖加密、分片与访问控制,恢复流程需要定期演练;不可导出的 HSM 密钥依赖设备级备份或集群复制策略,备份口令与密钥分开保管。
密钥用途分离
同一密钥只承担单一用途:签名、加密、密钥协商分别使用不同密钥,可以限制单点泄露的影响面,并满足合规对密钥用途的约束。
密钥层次结构
密钥体系按用途分层:根密钥保护下层密钥,下层密钥数量多、更换频繁;分层让高频轮换不影响根信任,根密钥保持低频使用与更强保护。
软件密钥库与 HSM 对比选型
软件密钥库(文件、JKS、PKCS12、系统密钥环)部署简单、成本低,但密钥以可导出形式存在;HSM 提供不可导出语义与硬件级保护,适合根密钥与高合规场景,代价是成本与运维复杂度。
私钥口令处理规范
保护私钥的口令应按密钥材料同等级管理:足够长度与随机性、与其它系统口令区分、通过环境变量或文件描述符注入而非命令行参数,并支持轮换与应急取用。
API Key 与客户端证书对比
API Key 是长期共享秘密,接入简单但身份与吊销能力弱;mTLS 客户端证书可绑定主体、支持有效期与吊销,更适合服务间强认证;选型取决于对手方与合规要求。
后量子密码迁移准备
后量子迁移包含算法替换与存量数据重加密两条线:先梳理长期保密数据与长期签名(根证书、固件签名)的生命周期,再制定混合过渡与迁移顺序。
密钥生成与随机性来源
密钥安全依赖高质量随机源:使用操作系统 CSPRNG 或平台密钥生成接口,避免自行拼装随机数;虚拟机与嵌入式设备要确认启动时有足够熵可用。
云 KMS 信封加密落地
云上常见模式:调用 KMS 生成数据密钥(返回明文与密文两份),本地用明文密钥加密数据后立即丢弃明文,只保存数据密文与数据密钥密文,解密时先解密钥再解数据。
云凭据轮换
云访问密钥、数据库口令与应用凭据应优先改为短期凭据(实例角色、工作负载身份);无法替代时按周期轮换并监控使用情况,避免长期静态密钥。
容器中的密钥注入
容器内密钥应通过 Secret 挂载或外部密钥系统注入,而不是打进镜像层;挂载建议只读,并确认密钥未进入镜像历史、构建缓存与运行日志。
密钥生成仪式与双人控制
根密钥等高风险密钥的生成仪式通过多人见证、角色分离与全程记录降低单点风险;流程脚本要预先评审并演练,产物当场备份并封存。
密钥派生与域分离
从主密钥派生多把子密钥时,为每个用途绑定不同的上下文(info/label/salt),保证某一路派生结果泄露不影响其它用途;HKDF 是常用实现,OpenSSL 3.x 提供 kdf 子命令。
密钥操作审计日志
记录密钥的生成、使用、导出尝试与销毁等操作,是发现异常使用与满足合规审计的基础;日志应包含主体、时间、操作、密钥标识与结果。
密钥销毁
密钥销毁要可证明、可追溯:清除所有副本(存储介质、备份、缓存、KMS/HSM 密钥对象),记录时间、执行人与依据;销毁前确认没有历史数据仍依赖该密钥。
签名服务与密钥隔离
把签名密钥放进独立签名服务:业务只能提交待签数据,密钥与签名逻辑集中在受控边界内,可对调用方、频率与内容做审计与限制。
密钥与证书联合盘点
把证书与对应私钥的存放位置、责任人、轮换时间一起盘点,才能在泄露事件中快速界定影响范围;盘点结果与证书清单、KMS/HSM 密钥列表交叉核对。
根密钥离线保护
根密钥离线保存可显著减少在线攻击面:仅在签发中间证书或轮换等必要场景使用,操作在隔离环境完成;离线介质需防篡改存放并双人取用。
密码敏捷性(crypto agility)
密码敏捷性指系统能低成本更换算法与密钥长度(RSA 迁 ECC、SHA-1 迁 SHA-256、为 PQC 过渡做准备);关键是接口抽象与参数可配置,并把算法版本写入数据格式。
密钥吊销与证书吊销的区别
密钥吊销是让密钥材料不可再用(KMS 禁用、HSM 删除对象、替换密钥对),证书吊销是让依赖方拒绝该证书;泄露处置通常两者都做,才能既停止使用又通知验证方。
短时凭据(JIT)
短时凭据按需签发、到期自动失效,替代长期静态密钥可缩小泄露窗口;落地依赖身份系统与签发服务,并需保证时钟一致与续期平滑。
密钥托管(escrow)
密钥托管把密钥副本交给受控第三方或专用系统保管,用于合规或灾难恢复;托管会扩大信任范围,需要明确取用流程、审批、审计与责任边界。
HSM 高可用与备份
HSM 是签名与解密链路的关键单点:需要评估多设备集群、密钥同步与设备备份策略;云 HSM 场景关注区域可用性、配额与网络延迟。
SSH Agent 转发风险
Agent 转发把本机密钥能力暴露给跳板机与远端主机上的进程,可能被借用完成横向登录;默认应关闭转发,跨跳板场景改用 ProxyJump 在本地完成认证。
硬件令牌与 PIV 私钥
硬件令牌(YubiKey、智能卡等)在设备内保存私钥并提供触控确认,常用于 SSH 登录、代码签名与双因素认证;密钥不可导出,丢失后需依赖备用令牌与恢复流程。
密钥使用监控
为密钥使用建立基线并监控偏离:调用来源、频率、时间与操作类型的变化通常早于事故暴露;对导出尝试、非工作时段调用等信号设置告警。
备份加密与密钥分离
备份按敏感数据保护:静态加密(KMS 信封加密或加密归档),且加密密钥与备份分开存放与授权,避免一次入侵同时获取备份与解密能力。
删除与安全擦除的区别
普通删除只移除文件系统引用,数据块可能仍可恢复;安全擦除通过覆写或加密擦除使数据不可恢复。SSD、快照与对象存储需按介质特性选择方案。
TLS 私钥放入 HSM 的思路
让 Web 服务器通过 PKCS#11 等接口使用 HSM 中的私钥,可以实现密钥不出设备;落地需评估每设备连接数、性能与故障切换,证书链仍按常规方式加载。
密钥安全传输
密钥在不同环境间传递需要受控通道与加密封装:传输前加密、随附校验信息,接收方验证后收紧权限落盘,并及时清理中转副本。