2012-07-17 27 views
6

He almacenado un certificado como una cadena codificada en Base64 en la base de datos. Puedo leer esto desde la base de datos y decodificarlo, pero me gustaría convertir el byte decodificado [] en un Certificado X509. Estoy buscando un código de muestra para hacer esto. Lo he intentado:Convertir byte de certificado [] en X509Certificate en Java

CertificateFactory certFactory = CertificateFactory.getInstance("X.509"); 
InputStream in = new ByteArrayInputStream(bytes); 
X509Certificate cert = (X509Certificate)certFactory.generateCertificate(in); 

Esto genera un problema con el tipo de codificación. Una muestra válida Cadena o byte [] que represente un certificado será buena.

¡Cualquier apuntador será genial! Gracias.

+1

¿Cuál es el "problema con el tipo de codificación" que usted menciona? ¿Es un problema de base de datos o un problema de Java? –

+0

Sospecho que lo que necesita es http://docs.oracle.com/javase/1.4.2/docs/api/java/security/cert/Certificate.html#getEncoded%28%29. El método getEncoded() le devolverá un byte []. –

+0

¿Cómo se obtuvo la matriz de bytes? ¿Y cuál es exactamente el problema con el tipo de codificación? ¿Y cuál de estas líneas de código arroja la excepción? ¿Y qué * es * la excepción? – EJP

Respuesta

0

Su código de muestra se ve bien. Puede generar ese byte[] usted mismo usando openssl:

openssl genrsa -out privkey.pem 
openssl req -new -x509 -key privkey.pem -outform DER -out cert.der 
+4

-1: OP estados, "en Java" –

+0

Respondí a su pregunta específica de Java. Se ve bien. Estaba abordando la segunda parte de la pregunta, donde está pidiendo muestras: generar aquellas con la herramienta externa openssl. – martijno

+1

El OP menciona "problema con el tipo de codificación". ¿Tu respuesta responde esa pregunta (no estoy seguro de cuál es la pregunta?)? ¿De qué manera es su ejemplo de openssl relevante para la pregunta de OP? –