密钥对生成要点
生成非对称密钥对看似只是一条命令,实际要一次做对几件事:随机源质量、密钥长度、用途分离与私钥保护。生成后立即校验,并纳入权限、备份与轮换流程,能避免绝大多数「证书与私钥不匹配」「私钥被读走」类事故。低熵环境是最容易被忽略的风险点,虚拟机冷启动与容器首次运行时尤其需要留意。
基本信息
| 随机源 | 系统 CSPRNG,如 /dev/urandom、BCryptGenRandom |
|---|---|
| 长度选择 | RSA 3072 位及以上、EC P-256 及以上、Ed25519 固定长度 |
| 用途分离 | 签名密钥与加密密钥分开生成 |
| 私钥保护 | 文件权限 600,优先存放于 KMS 或 HSM |
| 生成后动作 | 校验、备份、登记指纹与责任人 |
| 轮换 | 明确周期与触发条件 |
典型使用场景
- 新建服务:为证书申请生成密钥对并立即设定权限
- 内部 PKI:批量生成密钥并按主体登记归档
- 用途分离:为签名与加密各生成一套独立密钥
- 轮换演练:在测试环境验证从生成到替换的完整流程
- 合规审计:核对私钥文件的权限与存放位置
生成与校验
生成与校验
# 生成 3072 位 RSA 私钥
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:3072 -out rsa.key
# 校验私钥结构完整可用
openssl pkey -in rsa.key -check -noout
# 导出公钥并登记指纹,便于后续核对与轮换
openssl pkey -in rsa.key -pubout -out rsa.pub
# 收紧权限
chmod 600 rsa.key关键要素
| 要素 | 要求 | 常见失误 |
|---|---|---|
| 随机源 | 使用操作系统 CSPRNG | 自造随机数或用时钟做种子 |
| 长度 | 按强度对照表选择 | 沿用 2048 位以下的旧默认值 |
| 用途 | 签名与加密分离 | 一套密钥同时承担多种角色 |
| 权限 | 600 且属主明确 | 默认权限落盘后忘记收紧 |
| 备份 | 加密备份并记录位置 | 无备份,密钥丢失只能重签 |
密钥生成后不要用明文在网络或聊天工具中传输;需要分发时应借助加密通道或密钥库。
备份与安全是一对矛盾:没有备份的密钥一旦丢失就无法恢复,而备份又扩大泄露面,通常的折中是加密备份并严格限制访问对象。
轮换要有明确触发条件:不只是到期,还包括人员变动、疑似泄露与算法降级。把条件写进流程,才能避免长期不更换的隐患。