2013-02-01 138 views
1

我有一个Base-64编码的X.509(.CER)证书,它在下面的java代码中导致NullPointerException。导致它的行是PublicKey pubKey = pubCert.getPublicKey();从密钥库中加载证书

有没有办法来验证myfile.keystore是否有“xyz”证书?

final FileInputStream keyFile = new FileInputStream(filePath 
        + "myfile.keystore"); 
final KeyStore keyStore = KeyStore.getInstance("JKS"); 
String storepass = "mypass"; 
keyStore.load(keyFile, storepass.toCharArray()); 
Certificate pubCert = keyStore.getCertificate("xyz"); 
PublicKey pubKey = pubCert.getPublicKey(); 

回答

1

尝试keytool命令应该在你的JRE或JDK bin目录,看输出:

@raspbmc:~$ /opt/jdk1.8.0/bin/keytool -list -help 
keytool -list [OPTION]... 

Lists entries in a keystore 

Options: 

-rfc       output in RFC style 
-alias <alias>     alias name of the entry to process 
-keystore <keystore>   keystore name 
-storepass <arg>    keystore password 
-storetype <storetype>   keystore type 
-providername <providername> provider name 
-providerclass <providerclass> provider class name 
-providerarg <arg>    provider argument 
-providerpath <pathlist>  provider classpath 
-v        verbose output 
-protected      password through protected mechanism 

Use "keytool -help" for all available commands 

参考:

http://docs.oracle.com/javase/1.4.2/docs/tooldocs/windows/keytool.html

+1

别名已经改变,这帮助我知道这一点。 – c12

1

能否请您确认密钥库在类路径上吗?,

如上所述,如果您运行keytool -list -v -keystore .jks您将看到安装在密钥库中的证书。

如果您在密钥库中看到您的证书,但仍然遇到错误,可能是因为证书没有正确链接,我过去曾遇到过这个问题。 如果您仍然遇到问题,请从上面的命令粘贴输出,这将帮助我们解决您的问题

感谢

+1

别名改变了,谢谢。 – c12

0

编辑这一行

公钥PUBKEY = pubCert.getPublicKey();

公钥PUBKEY = keyStore.getPublicKey();