![](/img/trans.png)
[英]Private key algorithm does not match algorithm of public key in end entity certificate (at index 0)
[英]Certificate match to private key
我们目前正在用Java实现数字签名小程序。 用户将拥有包含私钥及其各自的证书的密钥库的令牌。 证书和私钥将具有不同的别名。
我需要做的是将商店中的私钥调用/匹配到用户在签名时选择的证书。 如何在Java中将私钥与其各自的证书进行匹配? 我需要类似getkey(alias,password)这样的东西,其中别名是从所选证书和密钥之间的匹配中得出的。
如果您使用的是ECC,
Q = k * P
其中Q是您的公钥,因此,当您知道私钥k时,您还知道基点P和曲线,因此您可以“轻松地”计算公钥。
当使用众所周知的实现方式(指数e是固定的)时,RSA的问题也很简单。 如果不固定,可能会很棘手,但也不会那么难。
另一个完全问题是...如何将给定的pubkey与存储的证书匹配? 另一个问题是为什么会这样? 您应该在签名后保存证书信息,并在Java密钥存储区访问对应于内核的证书。 模糊性始终是一个问题,特别是在加密中,您应尽可能明确。
如果我了解您的设计-您的想法不是您应该继续做的,但是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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.