加载密钥库文件,找不到别名

时间:2014-04-30 19:16:13

标签: java java-ee ssl keystore wildfly-8

我尝试使用KeyStore从密钥库获取信息。 我使用此命令生成了密钥库:

keytool -genkey -alias server -keyalg RSA -keystore server.keystore -validity 365点击this页面。

检查其信息keytool -list -v -keystore server.keystore我收到以下信息:

  

别名:服务器
  创作日期:2014年4月30日
  输入类型:PrivateKeyEntry
  证书链长:1
  证书[1]:
  (此处的其他信息)

使用此命令:keytool -list -keystore server.keystore -alias server我明白了这一点:

  

server,2014年4月30日,PrivateKeyEntry,   证书指纹(SHA1):28:65:5B:0C:B3:3C:C9:AA:F1:7C:CE:91:23:77:DD:0D:F8:54:70:B9

现在,我的java代码:

keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
keyStore.load(getClass().getResourceAsStream(KEYSTORE_FILE_PATH), "myPass".toCharArray());
keyStore.getCertificate("server").getPublicKey().getEncoded(); //here I get a null pointer exception - keystore.getCertificate("server") returns null. 

执行keyStore.aliases()会返回EmptyEnumeration。

应用程序使用maven,java ee 7,我已经将密钥库文件复制到我的应用程序的resources文件夹中。 KEYSTORE_FILE_PATH的值为" /server.keystore"。

感谢。

1 个答案:

答案 0 :(得分:5)

当没有具有指定名称的资源时,

Class.getResourceAsStream()返回null。 传递null输入流时,KeyStore.load()会将密钥库重置为空状态。

这意味着在运行时,您的代码找不到密钥库资源,并以静态方式继续使用空密钥库。

  • 添加一个保护条件,检查getResourceAsStream()在将值传递给KeyStore.load()之前返回非空值。
  • 在maven中检查您的代码和构建/打包过程,以确保密钥库文件存在于正确的位置。

some questions about getResourceAsStream()可以为您提供帮助。