gpt4 book ai didi

java - keyStore.getKey(别名, 密码) 返回 NULL

转载 作者:行者123 更新时间:2023-12-02 01:22:06 30 4
gpt4 key购买 nike

我需要签署一些字符串消息,但 keyStore.getKey() 返回 null。
我做了什么:
我导入了证书:

keytool -importcert -file cert.cer -keystore cert.jks -alias "cert"

我的java代码:

KeyStore keyStore = KeyStore.getInstance(this.keystoretype);
File keyStoreFile = ResourceUtils.getFile("classpath:kkb/"+keystoreFileName);
FileInputStream keyStoreFileInputStream = new FileInputStream(keyStoreFile.getPath());
keyStore.load(keyStoreFileInputStream, storePassArray);
Signature signature = Signature.getInstance(this.signalgorythm);
PrivateKey privateKey = (PrivateKey)keyStore.getKey(alias, keypassArray);

getKey()返回null,因为JavaKeyStore类中engineGetKey方法中的这一行代码:

public Key engineGetKey(String alias, char[] password)
throws NoSuchAlgorithmException, UnrecoverableKeyException
{
Object entry = entries.get(convertAlias(alias));
if (entry == null || !(entry instanceof KeyEntry)) {
return null;
}

条件“instanceof”返回 false,因为类“JavaKeyStore$TrustedCertEntry”的“entry”对象。我做错了什么?你能帮我吗?

最佳答案

I imported certificate:
keytool -importcert -file cert.cer -keystore cert.jks -alias "cert"

确实,您已导入包含公钥的证书

Condition "instanceof" return false, because "entry" object of class "JavaKeyStore$TrustedCertEntry".
What I do wrong?

现在你调用:

PrivateKey privateKey = (PrivateKey)keyStore.getKey(alias, keypassArray);

没有私钥,只有一个包含公钥的证书(通常是 X509Certificate)。

Can you help me?

这取决于您想要/需要什么。

如果您需要私钥(或 key 对),例如为了进行签名,您需要导入整个 key 对(例如从不同的 keystore )。

如果证书或公钥足够(例如用于签名验证),您可以获得证书或其公钥

keystore.getCertificate(alias).getPublicKey()

编辑:

I have this files: ca.cer, cert.cer, cert.der, cert.jks, cert.p12, cert.pfx, cert.pk8, cert.prv, cert.pub, kkbca_test.der, kkbca_test.pub. Which of them I need import too?

通常 PFX 或 P12 文件包含私钥(两者都是 pkcs12 keystore )。

要从 pkcs12 keystore 导入私钥,只需搜索互联网示例:https://jackstromberg.com/2013/05/importing-a-ssl-certificate-into-a-java-keystore-via-a-pkcs12-file/

keytool -v -importkeystore -srckeystore whateverthefileis.p12 -srcstoretype PKCS12 -destkeystore mykeystore -destalias aliasname -deststoretype JKS

如果您更熟悉 UI 工具,则可以使用keystore-explorer应用程序来管理/导入 key 和证书。

关于java - keyStore.getKey(别名, 密码) 返回 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57524788/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com