如何使用java.security.KeyStore类存储和加载密钥

创建密钥后,如何使用Keystore类的方法存储它们以及如何加载密钥?

储存:

KeyStore ks = KeyStore.getInstance("JKS"); ks.setKeyEntry("keyAlias", key, passwordForKeyCharArray, certChain); OutputStream writeStream = new FileOutputStream(filePathToStore); ks.store(writeStream, keystorePasswordCharArray); writeStream.close(); 

注意,除非您传递PrivateKey ,否则certChain可能为null

加载:

 KeyStore ks = KeyStore.getInstance("JKS"); InputStream readStream = new FileInputStream(filePathToStore); ks.load(readStream, keystorePasswordCharArray); Key key = ks.getKey("keyAlias", passwordForKeyCharArray); readStream.close(); 

阅读javadocs

编辑:

请注意,如果要存储SecretKey或使用SunJCE提供程序的任何部分(Java Cryptography Extension),则需要将KeyStore类型设置为JCEKS。

 KeyStore ks = KeyStore.getInstance("JCEKS"); 

我很感激,如果你解释我如何使用我的ssl / tls应用程序(sslserversocketfactory)我需要给它一个CA证书的路径

我遇到了一个我不知道密钥别名的情况,但我知道密钥库中只有一个密钥。 我使用以下代码加载密钥(在加载密钥库之后,如上所示):

 Enumeration aliases = keyStore.aliases(); String alias = aliases.nextElement(); KeyStore.PrivateKeyEntry keyEnt = (KeyStore.PrivateKeyEntry) keyStore.getEntry(alias, new KeyStore.PasswordProtection(keystorePass.toCharArray())); PrivateKey privateKey = keyEnt.getPrivateKey(); 

我在我的博客上添加了一个post,其中详细介绍了如何加载私钥,公钥以及如何使用它们。