2013-05-30 87 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

相關問題