2012-07-23 18 views
8

Estoy tratando de usar Java para leer un certificado que recibí de una parte externa. El código está lanzando el siguiente error:Lectura de un certificado X.509 con Java

java.lang.RuntimeException: java.security.cert.CertificateException: Unable to initialize, java.io.IOException: extra data given to DerValue constructor

el código:

FileInputStream ksfis = new FileInputStream(this.getCertificateFile()); 
ksbufin = new BufferedInputStream(ksfis); 
certificate = (X509Certificate) 
    CertificateFactory.getInstance("X.509").generateCertificate(ksbufin); 

Para asegurarse de que el problema no estaba en el código, he creado un certificado autofirmado y lo utilizó con el código, y funcionó bien. He instalado ambos certificados en el llavero del sistema, y ​​ambos son válidos. Estoy usando una Mac y Java 1.6.

¿Alguna idea de por qué obtengo la excepción anterior cuando cargo el certificado externo de Party? ¿Crees que se corrompió durante la transferencia? Si lo hizo, no debería aparecer como válido en el sistema local, ¿verdad?

+0

Si lo abre en un editor de texto, ¿muestra texto o basura? –

+0

Abrí el mío en el editor de texto y su basura completa y el de terceros está ordenadamente mal organizado dentro del certificado BEGIN y el texto del certificado END y el contenido dentro de estos dos extremos con == (codificado en base64?) – Java

+0

ordenado como en '- ---- INICIAR CERTIFICADO ----- \ n base 64 basura \ n ----- CERTIFICADO FINAL ----- 'Supongo? –

Respuesta

6

intenta escribir esto usando openssl, y luego importar el resultado:

openssl x509 -outform der -in certificate.pem -out certificate.der 

o utilizar la funcionalidad de Java Castillo Hinchable en la API de peso ligero:

http://www.bouncycastle.org/docs/pkixdocs1.5on/org/bouncycastle/openssl/PEMReader.html

Es posible codificar el resultado de nuevo y luego use el CertificateBuilder predeterminado en Java para obtener un certificado definido por JCE.

+0

FWIW, la API ligera de BouncyCastle me dio un error muy similar. – cmbaron

+0

No todos los certificados se crean iguales, @cmbaron, he visto muchos errores de codificación. Si está seguro de que su código debería funcionar (pregunte en la lista de correo Bouncy), entonces también puede ser su certificado. –

Cuestiones relacionadas