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

Rad*_*adu 4 java ssl keystore java-ee wildfly-8

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

keytool -genkey -alias server -keyalg RSA -keystore server.keystore -validity 365采取这个页面.

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

别名:server
创建日期:2014年4月30日
条目类型:PrivateKeyEntry
证书链长:1
证书[1] :(
其他信息在这里)

使用此命令:keytool -list -keystore server.keystore -alias 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. 
Run Code Online (Sandbox Code Playgroud)

执行keyStore.aliases()返回EmptyEnumeration.

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

谢谢.

Ole*_*hin 5

null当没有具有指定名称的资源时,Class.getResourceAsStream()返回. KeyStore.load()在传递null输入流时将密钥库重置为空状态.

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

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

一些 问题 有关 getResourceAsStream(),可以是对你的帮助.