我丢失了我的公钥.我可以从私钥中恢复吗?

Pau*_*ois 21 iphone macos openssl keychain ios

我为iOS/OSX开发创建了密钥对+签名证书.在某个地方,我丢失了与我的私钥一起使用的公钥.也许是因为Keychain Access没有将私钥和公钥组合在一起,就像它与证书和私钥一样(这太刺激了!为什么(不)这样做!)

在Keychain Access中,我仍然可以右键单击私钥 - >"申请证书"; 但没有公钥可用,我收到错误"无法在钥匙串中找到指定的项目".我确定公钥是可以恢复的,但是如何?显然,Keychain Access不够智能,无法自动完成.

我最终想出了这一点,几天之后我的答案就会正确,除非有人在答案中添加新内容.

Pau*_*ois 55

我记得模糊地能够在.pem文件上使用openssl这样做,所以这就是我的方向.

  • 在Keychain Access中,导出私钥,例如private.p12.是否应用密码.
  • 将其转换为.pem : openssl pkcs12 -in private.p12 -out private.pem. 输入上一步的密码.您被迫将密码应用于.pem.
  • 提取公共部分:openssl rsa -in private.pem -pubout > public.pem.输入上一步的密码.
  • 导入Keychain访问:security import public.pem -k login.keychain.如果您未指定钥匙串,则导入似乎已完成,但我找不到该项目的放置位置.
  • 在Keychain Access中,在登录钥匙串中查找"导入的公钥".重命名并移动到所需位置.
  • 自己清理,特别是那些没有密码或密码不好的.p12和.pem私钥.

  • @Slav 是的,这是一个权限问题。如果你的密钥的权限控制切换为“允许访问前确认”,则修改将起作用。您可以切换值、重命名密钥,然后再次切换值。 (5认同)
  • 第3步失败了,因为private.pem包含证书.它在改变第2步后起作用:openssl pkcs12 -in private.p12 -nocerts -nodes -out private.pem (4认同)
  • 如果要在不包含证书的情况下导出私钥,请确保从"所有项目"类别中导出私钥.请勿从钥匙串上的"钥匙"类别中导出钥匙.即使您没有选择私钥,也会包含与私钥对应的证书. (3认同)
  • @HarryTsai 我无法重命名,单击“保存更改”后没有任何反应。有任何想法吗?或者一个命令行来做同样的事情? (2认同)