2010-08-02 22 views

Respuesta

58

Sure.

Los objetos de certificado se pueden crear con una instancia de CertificateFactory, en particular, una configurada para crear certificados X509. Esto se puede crear así:

CertificateFactory certFactory = CertificateFactory.getInstance("X.509"); 

Luego debe pasar un InputStream que contenga los bytes del certificado. Esto puede lograrse envolviendo su matriz de bytes en un ByteArrayInputStream:

InputStream in = new ByteArrayInputStream(bytes); 
X509Certificate cert = (X509Certificate)certFactory.generateCertificate(in); 
+0

Gracias por su respuesta. Pero estoy obteniendo "(java.security.cert.CertificateException) java.security.cert.CertificateException: No se pudo analizar el certificado: java.io.IOException: entrada vacía" en la última línea. InputStream no está vacío, pero arroja la excepción – 0bj3ct

+1

. Lo mismo me sucedió al principio porque no estaba pensando cuidadosamente sobre lo que estaba haciendo. En mi caso fue porque estaba tratando de hacer lo anterior con los bytes de un almacén de claves en lugar del certificado en el almacén de claves. Extraer el certificado del almacén de claves, obtener los bytes codificados y luego trabajar en ellos fue lo que hizo que esta respuesta anterior funcionara para mí. –

+2

En mi caso, el problema era que el byte [] estaba codificado en base 64 ... El mensaje de error era la "entrada vacía" ligeramente engañosa. Tal vez ayuda a alguien en algún momento ... – riskop

-1
InputStream stream = null; 
byte[] bencoded = javax.xml.bind.DatatypeConverter.parseBase64Binary(x509CertificateStr); 

try { 
    CertificateFactory certFactory = CertificateFactory.getInstance("X.509"); 
    cert = (X509Certificate) certFactory.generateCertificate(stream); 

} catch (java.security.cert.CertificateException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
+0

La pregunta no menciona base-64 y falta la inicialización de 'stream'. Este código arrojará una 'NullPointerException'. – EJP

Cuestiones relacionadas