我正在尝试使用以下代码从 .p12 文件加载私钥:
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
java.security.KeyStore keyStore = KeyStore.getInstance("PKCS12", "BC");
keyStore.load(new FileInputStream(new File("my_domain_com.p12")), password);
keyStore.aliases().hasMoreElements(); //this is false
java.security.PrivateKey privateKey = (PrivateKey) keyStore.getKey("SomeAlias", password);
我正在尝试找出没有别名的原因。但我找不到。 空别名的原因是什么? 我想获取私钥并使用此 key 加密一些文本。还有其他方法吗?
我也有 .cer 文件,但我不确定是否应该一起使用。
最佳答案
有没有可能 keystore 里面什么都没有?使用 Java keytool
命令进行验证。
>keytool -list -v -keystore test.p12 -storetype PKCS12
Enter keystore password:
Keystore type: PKCS12
Keystore provider: SunJSSE
Your keystore contains 1 entry
Alias name: test_alias
Creation date: Sep 3, 2013
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
...
...
如果 keystore 中有条目,您应该会看到每个条目的“别名”。如果 keystore 中没有条目,您将看到“您的 keystore 包含 0 个条目”,您需要将它们导入 keystore 。
另外,加密的时候要用别人的公钥加密,别人用自己的私钥解密。他们用你的公钥加密,你用你的私钥解密。
关于java - 为什么 keyStore.aliases() 对于 pkcs12 是空的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18600126/