我一直在混合和匹配代码,尝试通过示例学习如何使用KeyStore。
我有这个createKeyStore方法:
private static KeyStore createKeyStore(String fileName, String pw) throws Exception
{
File file = new File(fileName);
final KeyStore keyStore = KeyStore.getInstance("JCEKS");
if (file.exists())
{
// .keystore file already exists => load it
keyStore.load(new FileInputStream(file), pw.toCharArray());
}
else
{
// .keystore file not created yet => create it
keyStore.load(null, null);
keyStore.store(new FileOutputStream(fileName), pw.toCharArray());
}
return keyStore;
}`
似乎正常,没有错误。
然后我尝试通过以下方式访问代码:
KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
keystore.load(new FileInputStream(keystorePath), pass.toCharArray());
String alias = "alias";
char[] password = pass.toCharArray();
Certificate cert = keystore.getCertificate(alias);
keystore.setCertificateEntry(alias, cert);
// Save the new keystore contents
FileOutputStream out = new FileOutputStream(keystoreFile);
keystore.store(out, password);
out.close();
但是我对keystore.load的调用引发了无效的Keystore Format异常。我尝试将FileInputStream替换为null,但设置证书似乎引发错误。
TL; DR:我只想在此密钥库中存储一些加密密钥,但似乎无法正确访问它。
感谢阅读!
您有:
final KeyStore keyStore = KeyStore.getInstance("JCEKS");
和
KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
更改这些内容,以便他们同意。
此:
Certificate cert = keystore.getCertificate(alias);
keystore.setCertificateEntry(alias, cert);
没有意义。如果密钥库中没有这样的证书,它将失败,如果存在,则将其替换为自己。到底有什么意义?
我尝试将FileInputStream替换为null
我无法想象为什么。 Javadoc中没有任何东西表明可以使用。
[如果您查看文档,它说要创建一个空的密钥库,请调用load方法,并将null作为文件输入参数。稍后从文件加载密钥库时,在else子句中将null作为password参数传递会导致null指针异常。
keystore.load(null, pass.toCharArray());