2011-06-16 32 views
32

En versiones anteriores a r146, fue posible crear objetos X509Certificate directamente. Ahora que la API está en desuso y la nueva solo entrega un objeto X509CertificateHolder.Bouncycastle: X509CertificateHolder a X509Certificate?

No puedo encontrar una forma de transformar un X509CertificateHolder en .

¿Cómo se puede hacer esto?

+1

¿Tiene un enlace a la documentación de la API? –

+0

Gracias, Steffen. Fue muy útil. – Martynas

+1

@SteffenHeil, debe poner la respuesta en la sección de respuestas para que podamos marcarla como respondida. – Ben

Respuesta

61

Voy a responder a mis propias preguntas, pero no eliminarlo, en caso de que otra persona tiene los mismos problemas:

return new JcaX509CertificateConverter().setProvider("BC") 
    .getCertificate(certificateHolder); 

Y para los certificados de atributos:

return new X509V2AttributeCertificate(attributeCertificateHolder.getEncoded()); 

No es agradable, ya que está codificando y decodificando, pero funciona.

+0

Excelente referencia. Gracias. –

+0

X509V2AttributeCertificate ahora está en desuso. No estoy seguro de qué usar o cómo analizar. X509AttrCertParser no está en desuso, pero engineRead() devuelve un X509V2AttributeCertificate que está en desuso. –

+1

Creo que debería eliminar la llamada al método '.setProvider (" BC ")', ya que no es estrictamente necesario. –

0

Otra opción es éste :)

CertificateFactory certFactory = CertificateFactory.getInstance("X.509"); 
InputStream in = new ByteArrayInputStream(certificateHolder.getEncoded()); 
X509Certificate cert = (X509Certificate) certFactory.generateCertificate(in); 
+0

Demasiado detallado, la respuesta @SteffenHeil parece ser el método más "estándar". –

-1

Esta es una posibilidad para obtener el X509CertificateHolder a X509Certificate y toString. (Primera frase del código es irrelevante)

X509CertificateHolder selfSignedCertificate = CertificateUtils.selfSignCertificate(certificationRequest, keyPair.getPrivate()); 
byte[] content = selfSignedCertificate.getEncoded(); 
CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509"); 
X509Certificate cert = (X509Certificate) certificateFactory.generateCertificate(new ByteArrayInputStream(content)); 
logger.debug("cert: {}", cert.toString()); 

........

+0

Debe agregar alguna explicación. –

Cuestiones relacionadas