2011-06-15 83 views
17

我試圖利用該方法獲得證書的公鑰公鑰:從獲得證書

FileInputStream fin = new FileInputStream("PathToCertificate"); 
CertificateFactory f = CertificateFactory.getInstance("X.509"); 
X509Certificate certificate = (X509Certificate)f.generateCertificate(fin); 
PublicKey pk = certificate.getPublicKey(); 

,但我收到以下錯誤:

Exception in thread "main" java.lang.ClassCastException: sun.security.x509.X509CertImpl cannot be cast to codec.x509.X509Certificate 
     at sergas_testcertificates.Main.main(Main.java:54) 

有誰知道這是什麼錯誤是關於?

在此先感謝

+1

什麼類型的關鍵是它的到來? RSA?我以前看過類似的消息,但不支持密鑰。 – jglouie 2011-06-15 13:39:16

+1

完整的堆棧跟蹤可以幫助識別問題。 – 2011-06-15 13:43:11

+0

@jglouie是的,它是RSA。 – javi 2011-06-15 13:46:56

回答

16

你有進口X509Certificate錯誤的類。

您可能在尋找java.security.cert.X509Certificate而不是codec.x509.X509Certificate

+1

+1看起來像,是的。 – 2011-06-15 14:44:30

+0

沒錯!我現在導入java.security.cert.X509Certificate,它工作正常。謝謝你的幫助! – javi 2011-06-15 15:07:59

+0

@javi:如果這是解決方案,請使用答案旁邊的複選標記圖標將其標記爲「最佳答案」。 – 2011-06-16 23:06:38

6
X509Certificate certificate = (X509Certificate)f.generateCertificate(fin); 
PublicKey pk = certificate.getPublicKey(); 

既然您只是拉公鑰,您可以使用證書類。工廠類將決定返回哪種類型的證書。

Certificate certificate = f.generateCertificate(fin); 
PublicKey pk = certificate.getPublicKey(); 

如果你需要施放此爲antoher原因,檢查你的進口,並改變它,X509證書應該從javax.security.cert中

+1

嗨,感謝沒有鑄造它也工作! – javi 2011-06-15 15:09:51