SDK viafirma platform

Extraer certificado firmante de una firma CMS/CAdES

En el siguiente ejemplo obtenemos el primer certificado (será de tipo X509CertificateHolder) de almacén del CMS firmado, que será el certificado firmante y lo convertimos a X509Certificate para, de él, extraer la PublicKey.

Java

//recuperamos el cms firmado
byte[] signed = ViafirmaClientFactory.getInstance().getDocumentoCustodiado(idFirma);

//Lo convertimos al tipo CMSSignedData
CMSSignedData cms = new CMSSignedData(signed);

//Obtenemos el almacen donde estan los certificados
Store store = cms.getCertificates();

// Obtenemos un Iterator para recorrerlos.
// Pasando null en getMatches(...) se recuperan todos los certifcados, el tipo para cada cert será X509CertificateHolder
Iterator i = store.getMatches(null).iterator();

// El primer elemento del iterador se corresponde siempre con el certificado firmante, el resto serán la cadena de confianza
ByteArrayInputStream certBytes = new ByteArrayInputStream(((org.bouncycastle.cert.X509CertificateHolder)i.next()).getEncoded());

//Convertimos a X509Certificate
X509Certificate x509 = (X509Certificate)(CertificateFactory.getInstance("X509").generateCertificate(certBytes));

//Obtenemos la clave publica
PublicKey pubKey = x509.getPublicKey();