2013-05-30 62 views
20

我为iOS/OSX开发创建了一个密钥对+签名证书。在某个地方,我失去了使用我的私钥的公钥。也许这是因为钥匙串访问不会将私钥和公钥分组在一起,就像它与证书和私钥一样(这太让人烦恼了!为什么它不这样做!)我失去了我的公钥。我可以从私钥恢复它吗?

在钥匙串访问中,我可以仍然右键单击私钥 - >“请求证书”;但没有公钥可用,我得到错误“在钥匙串中找不到指定的项目”。我是漂亮确定公钥可以恢复,但是怎么回事?显然,Keychain Access不够智能,无法自动完成。

我终于明白了这一点,并会在几天后标记我的答案,除非有人在答案中增加了新的内容。

回答

54

我记得隐约能够用openssl在.pem文件上做到这一点,所以这是我领导的方向。

  • 在钥匙串访问中,导出私钥,例如private.p12。是否应用密码。
  • 将其转换为.pem:openssl pkcs12 -in private.p12 -out private.pem。输入上一步的密码。您不得不将密码应用于.pem。
  • 提取公开部分:openssl rsa -in private.pem -pubout > public.pem。输入上一步的密码。
  • 导入钥匙串访问:security import public.pem -k login.keychain。如果您未指定钥匙串,则导入似乎完成,但我无法找到该项目的放置位置。
  • 在钥匙串访问中,请在登录钥匙串中查找“导入的公钥”。重命名它并移动到所需的位置。
  • 清理完自己后,尤其是没有密码或密码较差的.p12和.pem私钥。
+3

第3步失败,因为private.pem包含证书。它在更改步骤2后生效:openssl pkcs12 -in private.p12 -nocerts -nodes -out private.pem – jlukanta

+3

如果要导出不含证书的私钥,请确保从“所有项目”类别导出私钥。不要从钥匙串上的“钥匙”类别中导出钥匙。即使没有选择,私钥所对应的证书也会被包含在内。 – jlukanta

+0

你如何“重命名”一个钥匙链项目? – lhunath

相关问题