证书与私钥匹配

Posted

技术标签:

【中文标题】证书与私钥匹配【英文标题】:Certificate match to private key 【发布时间】:2012-12-17 20:13:24 【问题描述】:

我们目前正在用java 实现一个数字签名小程序。用户将拥有包含私钥密钥库及其各自证书的令牌。证书和私钥将具有不同的别名。

我需要做的是将存储中的私钥调用/匹配到用户在签名时选择的证书。 java - 如何在java中将私钥与其各自的证书匹配?我需要 getkey(alias, password) 之类的东西,其中别名来自所选证书和密钥之间的匹配。

【问题讨论】:

私有就是它的本质 - 一个密钥...没有办法将它与证书(公钥)相匹配。当然,您在选择时知道给定证书的私钥,因为它们一起存储在您的密钥库中。只需将它们放在一起(元组)。 Theolodis,目前正在尝试通过两者的 mod 进行哈希匹配(从 ceet 获取公钥后) 首页,这并不完全准确。公钥和私钥可以匹配,这就是重点 我不确定您的实现是否是一个好方法 - 请参阅 javadoc:KeyStore.PrivateKeyEntry 这种类型的条目包含一个加密的 PrivateKey,它可以选择以受保护的格式存储以防止未经授权使用权。它还附带相应公钥的证书链。给定实体使用私钥和证书链进行自我认证。此身份验证的应用程序包括签署 JAR 文件作为发布和/或许可软件的一部分的软件分发组织。 【参考方案1】:

如果你使用的是 ECC,那么

Q = k * P

其中 Q 是你的公钥,所以当你知道私钥 k 时,你也知道基点 P 和曲线所以您可以“轻松”计算公钥。

当使用众所周知的实现时,RSA 的问题也很简单,其中指数 e 是固定的。如果它没有修复它可能会很棘手,但也不是那么难。

另外一个问题是……你如何将给定的公钥与存储的证书相匹配?另一个问题是为什么要做这样的事情?您应该在签名后保存证书信息并访问 java 密钥库中的对应证书。歧义总是一个问题,特别是在加密领域,你应该尽可能明确。

【讨论】:

所以,更清楚一点。我们正在使用 pkcs#11。证书请求是自动生成的,私钥存储在令牌上,别名为 00000001.key 等,具体取决于请求编号。然后证书由 CA 发回并存储在令牌中。为便于客户使用,此证书使用别名。签名时,客户端选择相关证书。但是,签名操作需要证书及其相关私钥。因此需要找到它。 在 CSR 从您的 CA 回来后,您不能更改私钥别名(可能是 _priv)?或者在获得具有正确别名的响应后将私钥与证书一起存储?否则这将是有问题的......因为迭代私钥是一个坏主意。您必须有一些明确的连接,也许您可​​以在证书中添加一些指向私钥别名的 attr,但有人可能会认为这是信息泄露;) @BorisOstrovsky 通常证书和私钥在 PKCS#11 中被分配相同的 ID。你应该在同一个 PKCS#11 令牌中生成密钥对和证书,所以当你从某个地方发送证书时,在你的令牌中查找它,然后查找相应的私钥。【参考方案2】:

如果我理解你的设计 - 你的想法不是你应该继续的东西,但是 java 应该支持你需要的东西:

使用此代码:

 KeyStore.PrivateKeyEntry pkEntry = (KeyStore.PrivateKeyEntry)
 ks.getEntry("privateKeyAlias", password);
 Certificate certificateFromPrivateKey = pkEntry.getCertificate();
 KeyStore.TrustedCertificateEntry certEntry = (KeyStore.TrustedCertificateEntry)ks.getEntry("certificateAlias, password);
 Certificate certificateFromPublicKey = certEntry.getCertificate();

 if (certificateFromPrivateKey.equals(certificateFromPublicKey)) ...

在javadoc 中了解更多信息 - 但我真的认为你的做法是错误的。

另外 - 一个相关的 API(我假设你正在使用它) - http://docs.oracle.com/javase/6/docs/api/java/security/Signature.html

【讨论】:

我觉得有点倒退。我们需要根据用户选择的证书找到私钥(可能在商店里有很多)

以上是关于证书与私钥匹配的主要内容,如果未能解决你的问题,请参考以下文章

获取“没有证书匹配私钥”

使用 Godaddy 颁发的证书时“公钥证书和私钥不匹配”[关闭]

区块链与密码学第11-07讲:公钥与私钥安全存储

区块链与密码学第11-07讲:公钥与私钥安全存储

区块链与密码学第11-07讲:公钥与私钥安全存储

iPhone Developer' 不匹配任何有效的、未过期的证书/私钥对 - 但我正在创建和 Ipad 应用程序 [重复]