2011-07-18 126 views
3

我有一個證書和我從不同地方收到的PrivateKey。只給出這兩個抽象對象,我可以驗證證書是否與給定的PrivateKey相關聯,還是證書?Java驗證證書與密鑰關聯

我明白如果這些是RSA密鑰,我可以將它們轉換爲RsaPublicKey/RsaPrivateKey並驗證指數和模數是否匹配,但如果它們是ECDSA?其他類型呢?

我最終希望將密鑰存儲到證書作爲證書鏈的密鑰庫中,如果我試圖從另一個密鑰中加載帶有證書的密鑰,我期望這會引發異常或導致某種錯誤。但這似乎並不重要?

回答

2

首先,可以肯定的是,您可以使用您的私鑰簽署隨機數據塊並使用公鑰進行驗證。公鑰是證書的一部分。它適用於所有簽名算法。

私鑰結構包含匹配的公鑰也是很常見的。你應該檢查它 - 搜索一個匹配的鍵將會更容易。

+0

我認爲這對我們很有用。我不一定知道我手上有哪些關鍵類型,但我可以嘗試一下RSA簽名驗證,然後是ECDSA。如果兩者都有效,我會認爲它們是有效的一對。 – kenen

-1

不應該有的私鑰。它是私人的。所有你需要的是他們的公鑰密鑰,然後你通過Certificate.verify(PublicKey key)驗證證書。

無論誰給你的私鑰只是嚴重COMPROMISED他們的安全。他們需要創建一個新的私鑰,簽名證書等,並部署它,並停止使用先前的密鑰。他們還需要保留新私鑰的私密性。

+2

你怎麼能從OP的說什麼不是他的私鑰而不是別人的私鑰? –

+0

@GregS,因爲他說(a)他'收到'他們和(b)他'從不同的地方'收到了他們。 – EJP

+1

我的意思是在某些情況下,我將有一個文件包含證書和一個包含私鑰的文件。我主要關心的是,如果用戶已經加載了私鑰並嘗試爲另一個密鑰加載證書,則會給用戶一個錯誤。或相反亦然。 – kenen