2017-04-27 71 views
-1

異常是:線程「main」中的異常java.lang.ClassCastException:[Ljava.security.cert.Certificate;不能轉換爲[Ljava.security.cert.X509Certificate;如何解決此異常:線程「main」中的異常java.lang.ClassCastException

在keystore.jks文件

,它有一個入口,它的別名是 「/ btsmed-1/CERTH-1/necert-1」,在該證書鏈keystore.jks文件通過該方法設置成:

keystore.setKeyEntry(alias, Keys.keyPair().getPrivate(),KEY_STORE_PASSWORD.toCharArray(), certChain); 
keystore.store(out, KEY_STORE_PASSWORD.toCharArray()); 

之前我重新加載JKS密鑰存儲到,當執行該語句:

X509Certificate[] certs1 = (X509Certificate[])keystore.getCertificateChain(alias); 

它不會引發轉換異常。

但在keystore.load(fIn,password)之後;它會拋出轉換異常時,執行該語句:

X509Certificate[] certs1 = (X509Certificate[]) keystore.getCertificateChain(alias); 

====================下面是源代碼。

public class KeystoreLoad { 

    public static void main(String[] args) throws Exception { 
     char[] password = "nokia123".toCharArray(); 
     String alias = "/btsmed-1/certh-1/necert-1"; 

     KeyStore keystore = KeyStore.getInstance("JKS"); 

     keystore.load(null, null); 

     FileInputStream fIn = new FileInputStream("d://keystore/keystore.jks"); 

     keystore.load(fIn, password); 

     X509Certificate[] certs1 = (X509Certificate[]) keystore.getCertificateChain(alias); 
     System.out.println(Arrays.toString(certs1)); 

    } 

} 

回答

0

試試這個

import java.io.FileInputStream; 
import java.security.KeyStore; 
import java.util.Arrays; 

import java.security.cert.X509Certificate; 

public class TestDemo { 

    public static void main(String[] args) throws Exception { 

     char[] password = "nokia123".toCharArray(); 
     String alias = "/btsmed-1/certh-1/necert-1"; 

     KeyStore keystore = KeyStore.getInstance("JKS"); 

     keystore.load(null, null); 

     FileInputStream fIn = new FileInputStream("d://keystore/keystore.jks"); 

     keystore.load(fIn, password); 
     keystore.getCertificateChain(alias); 
     X509Certificate[] certs1 = (X509Certificate[]) keystore.getCertificateChain(alias); 

     System.out.println(Arrays.toString(certs1)); 

    } 

} 

得到它insted的imporing javax.security.cert.X509Certificate使用 java.security.cert.X509Certificate

+0

感謝您的答案,但我想轉讓證書[]輸入X509證書[],和我不不知道爲什麼它會失敗。 – danny

+0

嘗試修改後的一個 – Narendra

+0

X509Certificate [] certs1 =(X509Certificate [])keystore.getCertificateChain(alias);使用相同但更改導入 – Narendra

0

這是因爲Java編譯器沒有按」的t知道getCertificateChain()方法返回的Certificate[]中的所有對象是否僅包含X509Certificate [儘管X509Certificate是擴展Certificate的唯一類到目前爲止]。

所以如果你需要的X509Certificate[]你必須遍歷Certificate[],象下面這樣:

Certificate[] certChain = ks.getCertificateChain("ALIAS"); 

X509Certificate[] x509CertChain = new X509Certificate[certChain.length]; 
for (int i = 0; i < certChain.length; i++) 
    x509CertChain[i] = (X509Certificate) certChain[i]; 
相關問題