私钥密码加解密
要不要给私钥加密码
- 服务器上的私钥,一般不加
- 加了密码,nginx / Apache 每次重启都会停在那里等人输密码,自动重启、开机自启、容器滚动更新全都做不了。实际部署里通行的做法是:私钥不加密码,靠文件权限(
chmod 600、属主 root)和机器本身的访问控制来保护。 - 要传给别人、要存到仓库或网盘的私钥,一定要加
- 私钥离开服务器的那一刻,文件权限就保护不了它了。发邮件、丢群里、放对象存储之前先加个强密码,是最后一道防线。
- 两种加密格式的区别
- 老格式是在 PEM 头里写
Proc-Type: 4,ENCRYPTED和DEK-Info,密钥派生用的是 MD5 迭代一次,非常弱,现在只适合读不适合写。新格式是 PKCS#8 的ENCRYPTED PRIVATE KEY,走 PBES2(PBKDF2 + AES),本页生成的就是这种。 - 对应的 openssl 命令
- 加密码:
openssl pkcs8 -topk8 -in plain.key -out enc.key -v2 aes-256-cbc;去密码:openssl pkcs8 -topk8 -nocrypt -in enc.key -out plain.key;老格式去密码:openssl rsa -in enc.key -out plain.key。本页做的是同样的事,区别是不需要把私钥拷到装了 openssl 的机器上。 - 密码忘了怎么办
- 没有找回的办法。只能重新生成密钥对,用 CSR 生成 重做一份申请,让 CA 重新签发。
- 怎么确认解出来的私钥没解错
- 本页会在结果里给出公钥指纹。拿它和证书的公钥指纹对一下就知道配不配,也可以直接用 证书私钥配对 把证书和私钥放一起校验。