2011-07-18 127 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