2013-02-01 186 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();