3、密钥管理基础:对称密钥与非对称密钥、公钥基础设施(PKI)概念、证书链与信任锚
聊到签名服务,密钥管理是绕不开的核心。说白了,密钥就是数字世界的身份证和印章。你管不好密钥,签名服务就是纸糊的。我见过不少团队,代码写得漂亮,结果密钥硬编码在配置文件里,或者用个弱密码一撸到底——嗯,那基本等于把家门钥匙挂在门外。
这一章,我们把这几个基础概念掰开揉碎。别急,都是干货。
3.1 对称密钥 vs 非对称密钥
先搞清楚这两个东西的区别。我习惯用一个比喻:对称密钥就像一把锁,开锁和锁门用的是同一把钥匙。非对称密钥呢,是一把锁配两把钥匙——一把公开的(公钥),一把私藏的(私钥)。
| 特性 | 对称密钥 | 非对称密钥 |
|---|---|---|
| 密钥数量 | 1 个(共享密钥) | 2 个(公钥 + 私钥) |
| 加解密速度 | 快(硬件加速友好) | 慢(数学运算复杂) |
| 密钥分发 | 困难(需要安全通道) | 容易(公钥随便发) |
| 典型算法 | AES、SM4、3DES | RSA、ECDSA、SM2 |
| 主要用途 | 批量数据加密 | 数字签名、密钥交换 |
你想想看,如果我用对称密钥给 1000 个用户发加密文件,我得生成 1000 个不同的密钥,还得安全地送到每个人手里——这工作量,光想想就头疼。非对称密钥就优雅多了:我只需要把公钥公开,私钥自己藏好。别人用我的公钥加密数据,只有我能用私钥解密。
核心结论:实际系统中,两者是配合使用的。非对称密钥用来安全地交换对称密钥(这叫密钥协商),对称密钥用来加密真正的业务数据。这叫「混合加密」,性能和安全兼顾。
3.2 公钥基础设施(PKI)概念
好,现在你有了公钥和私钥。问题来了:你怎么证明这个公钥真的是我的?
这就是 PKI 要解决的事。PKI 不是某个算法,而是一整套体系——包括证书颁发机构(CA)、注册机构(RA)、证书吊销列表(CRL)等等。它的核心逻辑很简单:找一个大家都信任的第三方,让它来担保「这个公钥属于张三」。
我参与过一个政务签名项目,初期我们自己签发自签名证书,结果对接方根本不认——人家只认国家 CA 颁发的证书。后来我们老老实实去申请了合规的 CA 证书,问题迎刃而解。这就是 PKI 的现实意义:信任需要背书。
PKI 的核心组件
- CA(证书颁发机构):签发和管理证书的权威机构。根 CA 是信任的起点。
- RA(注册机构):负责审核申请者身份,把审核结果交给 CA 去签发证书。
- 证书库:存储已签发证书和吊销列表的地方,通常用 LDAP 或 HTTP 访问。
- CRL(证书吊销列表):记录被提前作废的证书。比如私钥泄露了,就得吊销。
避坑指南:我曾经遇到一个案例,对方系统缓存了 CRL 长达 24 小时不更新。结果一张被吊销的证书还能正常使用一整天。建议 CRL 缓存时间不要超过 4 小时,关键业务最好用 OCSP(在线证书状态协议)实时查询。
3.3 证书链与信任锚
证书不是孤立存在的。你拿到的服务器证书,通常是由中间 CA 签发的,中间 CA 的证书又由根 CA 签发。这就形成了一条链——证书链。
为什么搞这么复杂?直接让根 CA 签所有证书不行吗?
不行。根 CA 的私钥是最高机密,如果它被泄露,整个信任体系就崩了。所以根 CA 通常离线保存,平时只用中间 CA 干活。万一中间 CA 出问题,吊销它就行,根 CA 纹丝不动。
注意:证书链必须完整。如果服务端只发了服务器证书,没发中间 CA 证书,客户端可能因为找不到中间证书而验证失败。我排查过好几次这类问题,最后发现都是「缺链」导致的。
信任锚是什么?
信任锚就是证书链验证的起点。通常就是根 CA 的证书。你的操作系统或浏览器里预装了一批根证书,这些就是信任锚。只要证书链能追溯到这些根证书之一,系统就认为它是可信的。
举个例子:你访问支付宝,它给你发来一张证书。你的浏览器会做这几步:
- 检查证书是否在有效期内
- 检查证书是否被吊销
- 用签发者的公钥验证证书签名
- 递归向上验证,直到找到信任锚
每一步都通过,浏览器才放心地亮出小绿锁。
下面这张图展示了完整的证书链结构:
3.4 密钥生命周期管理
密钥不是永久的。从生成到销毁,每个阶段都有讲究。我整理了一个清单,你在搭建签名服务时可以直接拿来用:
| 阶段 | 关键操作 | 常见问题 |
|---|---|---|
| 生成 | 使用硬件安全模块(HSM)或可信随机源 | 伪随机数导致密钥可预测 |
| 存储 | 加密存储,访问控制,定期备份 | 明文存储、权限过大 |
| 使用 | 限制使用次数/频率,记录审计日志 | 密钥泄露后未及时轮换 |
| 轮换 | 定期更换密钥,旧密钥安全归档 | 轮换后未更新依赖方 |
| 吊销 | 立即发布 CRL,通知相关方 | 吊销延迟导致安全窗口 |
| 销毁 | 彻底覆写或物理销毁 | 残留数据被恢复 |
我的习惯:私钥生成后,立刻用 HSM 的加密分区存储,应用层只保留一个 Key ID。这样即使应用服务器被攻破,攻击者也拿不到私钥本体。另外,轮换周期我一般设 90 天,和证书有效期错开,避免同时过期手忙脚乱。
3.5 小结
这一章的内容,说白了就是三件事:
- 对称密钥快但分发难,非对称密钥慢但安全,两者搭配使用
- PKI 解决了「公钥是谁的」这个信任问题,CA 是核心
- 证书链让信任可以分层管理,根 CA 作为信任锚离线保护