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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Java中读取/加载jks cert文件将返回空别名相关的知识,希望对你有一定的参考价值。

我正在尝试使用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它列出了控制台中cert的所有信息(别名和值)。

谁能帮我理解我在这里缺少什么?

答案

如果提供的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");
}

以上是关于在Java中读取/加载jks cert文件将返回空别名的主要内容,如果未能解决你的问题,请参考以下文章

证书 pem 转 jks

windows生成jks文件并且生成cer证书

如何将信任证书从 .jks 转换为 .pem?

SSLHandshakeException - java.security.cert.CertPathValidatorException:需要非空策略树且策略树为空

如何从CERTIFICATE文件中抽取PUBLIC KEY

SHA256_cert_fingerprints 中涉及的参数,用于应用链接验证