2011-06-15 25 views
17

Estoy tratando de obtener la clave pública de un certificado con el método:La obtención de la clave pública del certificado de

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

pero recibo el siguiente error:

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) 

¿Alguien sabe lo que este el error se trata?

Gracias de antemano

+1

Qué tipo de clave es? RSA? He visto mensajes similares anteriormente con claves no compatibles. – jglouie

+1

El seguimiento completo de la pila podría ayudar a identificar el problema. –

+0

@jglouie sí, es RSA. – javi

Respuesta

16

Usted tiene la clase equivocada importado para X509Certificate.

Es probable que esté buscando java.security.cert.X509Certificate no codec.x509.X509Certificate.

+1

+1 Parece que sí. –

+0

¡Eso es! Ahora importo java.security.cert.X509Certificate y está funcionando bien. ¡Gracias por tu ayuda! – javi

+0

@javi: si esta fue la solución, márquelo como "mejor respuesta", utilizando el icono de marca de verificación junto a la respuesta. –

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

dado que solo está sacando la clave pública, puede usar la clase de certificado. La clase de fábrica decidirá qué tipo de certificado devolver.

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

Si necesita jugarlo por antoher razón, revisar sus importaciones y cambiarlo, X509Certificate debe venir de javax.security.cert

+1

Hola, gracias sin emitir, ¡también está funcionando! – javi

Cuestiones relacionadas