在Java中读取/加载jks cert文件将返回空别名

时间:2018-03-02 08:24:04

标签: java certificate keystore

我正在尝试使用Java中的KeyStore加载和读取cert文件的值。这是我加载jks文件的代码片段。 它不会抛出任何异常,但keyStore.aliases不会返回任何异常并且为空。

KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());  
Class clazz = Matcher.class;
InputStream inputStream = clazz.getResourceAsStream("/mycert.jks");  
keyStore.load(inputStream, "password".toCharArray());   
Enumeration<String> keyStoreAliases = keyStore.aliases();

同时当我尝试使用如下的keytool列出相同.jks文件的所有别名时,  $ keytool -v -list -keystore mycert.jks 它列出了控制台中证书的所有信息(别名和值)。

任何人都可以帮助我理解我在这里缺少什么吗?

1 个答案:

答案 0 :(得分:1)

如果提供的KeyStore.load()为null,

InputStream很可能不会抛出任何异常。此行为取决于实现,但通常的sun.security.provider.JavaKeyStore实现不会抛出。

可能是您的系统上没有/mycert.jks个文件。

InputStream in = getClass().getResourceAsStream("/mycert.jks");  
if (in == null) { 
  throw new NullPointerException("No JKS input stream");
}