2017-04-27 9 views
-1

예외 : thread "main"의 예외 java.lang.ClassCastException : [Ljava.security.cert.Certificate; [Ljava.security.cert.X509Certificate; keystore.jks 파일이 예외를 수정하는 방법 : thread "main"의 예외 java.lang.ClassCastException

, 그것은, 그것의 별칭은 하나 개의 항목이다있다 "/ btsmed-1/certh-1/necert-1"이 인증서 체인이 방법에 의해로 설정된 파일 keystore.jks :

나는이 문장을 실행할 때, 키 저장소 JKS로드 다시하기 전에
keystore.setKeyEntry(alias, Keys.keyPair().getPrivate(),KEY_STORE_PASSWORD.toCharArray(), certChain); 
keystore.store(out, KEY_STORE_PASSWORD.toCharArray()); 

:

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)); 

    } 

} 

이 그것은 자바 컴파일러는 '아무튼 때문에 javax.security.cert.X509Certificate는이 는 java.security.cert.X509Certificate

+0

감사합니다,하지만 난 인증서는 []이 X509Certificate [] 입력 전송하려는, 그리고 돈을 그것이 왜 실패 할 것인지를 안다. – danny

+0

수정 된 것을 시도하십시오. – Narendra

+0

X509Certificate [] certs1 = (X509Certificate []) keystore.getCertificateChain (alias); 동일하게 사용하지만 가져 오기를 변경하십시오. – Narendra

0

를 사용 imporing의 insted 가지고 시도 getCertificateChain() 메서드에 의해 반환 된 Certificate[]의 모든 개체가 X509CertificateCertificate을 확장하는 유일한 클래스 인 경우에도 X509Certificate [[ 지금의 수업].

당신은 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];