我尝试使用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"。
感谢。
答案 0 :(得分:5)
Class.getResourceAsStream()返回null
。
传递null
输入流时,KeyStore.load()会将密钥库重置为空状态。
这意味着在运行时,您的代码找不到密钥库资源,并以静态方式继续使用空密钥库。
getResourceAsStream()
在将值传递给KeyStore.load()
之前返回非空值。