Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

ÍNDICE DE SERVICIOS

Table of Contents
maxLevel3

Inicialización del cliente

Para poder consumir los métodos que se indican a continuación es necesario disponer de Usuario en SIFE e inicializar el cliente de SIFE con dicho usuario y la contraseña correspondiente. A continuación se muestra un ejemplo de inicialización del cliente.

Code Block
languagejava
firstline1
titleEjemplo de invocación firma CAdES básica
linenumberstrue
DigitalSignatureServiceClient digitalSignatureServiceClient = new DigitalSignatureServiceClient("http://preaplicaciones.aragon.es/sife/services", USER, PASSWORD);

Servicios DigitalSignatureServiceJaxRsV2

Gestión de firma electrónica

Conjunto de métodos que permiten realizar operaciones de firma electrónica, firmar, elevar una firma, validar certificado, validar una firma, generar un timestamp, etc. Se trata de un servicio REST que se encuentra disponible en v2/dss/.

Actualmente se sigue dando soporte la la versión v1/dss del servicio DigitalSignatureServiceJaxRS pero pasa a estar deprecated y será eliminado en un futuro

Método 'sign'

Método que realiza la firma electrónica en servidor utilizando un certificado almacenado previamente en el keystore centralizado.Se puede indicar los parámetros de firma (digestAlgorithm, signatureLevel. signaturePackaging, etc) o bien utilizar un perfilde firma predefinido usando signatureProfile.

Expand
titleMás detalles

Signatura

SifeDocument sign(SignatureParameters params)

Parámetros de invocación

NombreTipoDescripción
paramsObjeto SIFE_1.7_Manual de integración v1.0#SignatureParameters (ver detalle de campos en el apartado de objetos comunes)

Parámetros de respuesta

NombreTipoDescripción
signedDocumentObjeto SIFE_1.7_Manual de integración v1.0#SifeDocument (ver detalle de campos en el apartado de objetos comunes)

Códigos error

CódigoDescripción
NO_SIGNATUREPROFILE_ERRORNo existe el perfil seleccionado para realizar la firma
NO_SIGNATURELEVEL_ERROREl valor de signatureLevel de params es nulo
BAD_SIGNATURE_PACKAGING_ERROREl método de packaging elegido no es compatible con el tipo de firma elegido
NOT_FOUND_ERRORError al obtener datos de CCSV
REQUIRED_DATA_ERRORDatos requeridos para la realización de la firma son nulos
REQUIRED_HASH_ERRORFaltan datos para la realización de una firma a partir de HASH
BAD_CERTIFICATE_ERROREl existe un certificado con el alias establecido en el keystore
REQUIRED_SIGN_ERROREl documento no tiene firma asociada en CCSV
STAMP_NOT_AUTHORIZEDEl sello utilizado para la firma no ha sido autorizado previamente

Pueden obtenerse otros códigos de error diferentes a los comentados en la tabla anterior se produce algún error durante el proceso de firma en la plataforma @firma, estos errores no poseen un código propio de SIFE sino que se devuelve el código devuelvo por la plataforma directamente.

Ejemplos de invocación

En función de los valores que poseen los parámetros de entrada, se pueden realizar varias operaciones de firma, firma CAdES básica, firma con sello de tiempo, firma con CSV, firma con Hash, entre otros. A continuación se muestran algunos ejemplos de invocaciones para realizar estas firmas.


Code Block
languagejava
firstline1
titleEjemplo de invocación firma CAdES básica
linenumberstrue
byte[] originalDocument = FileUtils.readFileToByteArray(new File("pathFile"));
SifeDocument sifeDocument = new SifeDocument();
sifeDocument.setData(originalDocument);

SignatureParameters signatureParameters = new SignatureParameters();
signatureParameters.setSignatureLevel(SignatureLevel.CAdES_BASELINE_B);
signatureParameters.setSignaturePackaging(SignaturePackaging.DETACHED);
signatureParameters.setDigestAlgorithm(DigestAlgorithm.SHA512);
signatureParameters.setSigningCertificateAlias("ast_cert");
signatureParameters.setDocument(sifeDocument);

SifeDocument documentSigned = digitalSignatureServiceClient.sign(signatureParameters);


Code Block
titleEjemplo de invocación firma XAdES Manifest utilizando documento completo.
linenumberstrue
byte[] originalDocument = FileUtils.readFileToByteArray(new File("pathFile"));
SifeDocument sifeDocument = new SifeDocument();
sifeDocument.setData(originalDocument);

signatureParameters.setDigestAlgorithm(DigestAlgorithm.SHA1);
signatureParameters.setSignatureLevel(SignatureLevel.XAdES_BASELINE_B);
signatureParameters.setSignaturePackaging(SignaturePackaging.DETACHED);
signatureParameters.setDigestAlgorithm(DigestAlgorithm.SHA512);
signatureParameters.setSigningCertificateAlias("ast_cert");
signatureParameters.setDocument(sifeDocument);

SifeDocument documentSigned = digitalSignatureServiceClient.sign(signatureParameters);


En el caso de que se quiera realizar la firma a partir del Hash del documento, hay que tener en cuenta que el algoritmo utilizado para la generación del Hash tiene que ser el indicado como DigestAlgorithm.

Code Block
languagejava
firstline1
titleEjemplo de invocación firma usando Hash
linenumberstrue
//Generacion del hash del documento
byte[] originalDocument = FileUtils.readFileToByteArray(new File("pathFile"));
MessageDigest.getInstance("SHA-256");
Byte[]originalDocumentHash = md.digest(originalDocument);

//Se rellenan los datos del documento
SifeDocument sifeDocument = new SifeDocument();
sifeDocument.setDigestAlgorithm(DigestAlgorithm.SHA256);
sifeDocument.setDigestValue(originalDocumentHash);

SignatureParameters signatureParameters = new SignatureParameters();
signatureParameters.setDigestAlgorithm(DigestAlgorithm.SHA256);
signatureParameters.setSignatureLevel(SignatureLevel.CAdES_A);
signatureParameters.setSignaturePackaging(SignaturePackaging.DETACHED);
signatureParameters.setSigningCertificateAlias("ast_cert");
signatureParameters.setDocument(sifeDocument);

SifeDocument documentSigned = digitalSignatureServiceClient.sign(signatureParameters);


Code Block
titleEjemplo de invocación de firma XAdES nivel XAdES_A mediante hash SHA-512
linenumberstrue
//Generacion del hash del documento
byte[] originalDocument = FileUtils.readFileToByteArray(new File("pathFile"));
MessageDigest.getInstance("SHA-512");
Byte[]originalDocumentHash = md.digest(originalDocument);

//Se rellenan los datos del documento
SifeDocument sifeDocument = new SifeDocument();
sifeDocument.setDigestAlgorithm(DigestAlgorithm.SHA512);
sifeDocument.setDigestValue(originalDocumentHash);

SignatureParameters signatureParameters = new SignatureParameters();
signatureParameters.setDigestAlgorithm(DigestAlgorithm.SHA512);
signatureParameters.setSignatureLevel(SignatureLevel.XAdES_A);
signatureParameters.setSignaturePackaging(SignaturePackaging.DETACHED);
signatureParameters.setSigningCertificateAlias("ast_cert");
signatureParameters.setDocument(sifeDocument);

SifeDocument documentSigned = digitalSignatureServiceClient.sign(signatureParameters);



En el caso de indicar un CSV para la realización de la firma, se realizará una búsqueda del documento en CCSV a partir de dicho dato. Serán ignorados los datos añadidos a partir de sifeDocument.setData(originalDocument) y sifeDocument.setDigestValue(originalDocumentHash). En el caso de que no se encuentre un documento con dicho CSV en CCSV, se devolverá un error.

Importante: En ningún caso el documento será actualizado en CCSV, será tarea del integrador realizar esta actualización si fuera necesario.

Code Block
languagejava
firstline1
titleEjemplo de invocación firma usando CSV
linenumberstrue
SifeDocument sifeDocument = new SifeDocument();
sifeDocument.setCsv(CSV);

SignatureParameters signatureParameters = new SignatureParameters();
signatureParameters.setDigestAlgorithm(DigestAlgorithm.SHA256);
signatureParameters.setSignatureLevel(SignatureLevel.CAdES_A);
signatureParameters.setSignaturePackaging(SignaturePackaging.DETACHED);
signatureParameters.setSigningCertificateAlias("ast_cert");
signatureParameters.setDocument(sifeDocument);

SifeDocument documentSigned = digitalSignatureServiceClient.sign(signatureParameters);

Método 'extendSignature
Anchor
extendSignature
extendSignature

Método que eleva la firma que se le pasa como parámetro a un nivel superior, por ejemplo de CAdES-B a CAdES-T, CAdES-A o CAdES-LTA.

...

El método 'extendSignature' no modificado los datos almacenados en CCSV en ningún momento, únicamente realizará la elevación y devolverá el resultado.

Expand
titleMás detalles

Signatura

SifeDocument extendSignature (ExtensionParameters params)

Parámetros de invocación

NombreTipoDescripción
paramsObjeto SIFE_1.7_Manual de integración v1.0#ExtensionParameters (ver detalle de campos en el apartado de objetos comunes)

Parámetros de respuesta

NombreTipoDescripción
signedDocumentSifeDocument

Objeto SIFE_1.7_Manual de integración v1.0#SifeDocument (ver detalle de campos en el apartado de objetos comunes)

Códigos error

CódigoDescripción
REQUIRED_SIGN_ERROREl documento no tiene firma asociada en CCSV
NOT_FOUND_ERRORError al obtener datos de CCSV
REQUIRED_DATA_ERRORDatos requeridos para la realización de la firma son nulos
REQUIRED_HASH_ERRORFaltan datos para la realización de una firma a partir de HASH
BAD_CERTIFICATE_ERROREl existe un certificado con el alias establecido en el keystore

Ejemplos de invocación

Es posible la elevación de la firma a partir del contenido del documento, o a partir de su Hash si se trata de una firma detached. 

Code Block
languagejava
firstline1
titleEjemplo de invocación elevación CAdES-A documento completo
linenumberstrue
SifeDocument extendedSignature = null;

// Se establece la firma
byte[] signature= Base64.decode(FileUtils.readFileToString(new File("pathFile"));
SifeDocument sign = new SifeDocument();
sign.setData(signature);

// Se añade el contenido del documento porque se trata de una firma detached
byte[] extendedDocument = FileUtils.readFileToByteArray(new File("pathFile"));
SifeDocument detachedContent = new SifeDocument();
detachedContent.setData(document);

// Especificamos tanto el documento original como la firma y el nivel de elevacion de la firma
ExtensionParameters extensionParameters = new ExtensionParameters();
extensionParameters.setDetachedContent(detachedContent);
extensionParameters.setSignature(sign);
extensionParameters.setSignatureLevel(SignatureLevel.CAdES_A);

extendedSignature = digitalSignatureServiceClient.extendSignature(extensionParameters);


Para realizar la elevación a partir del Hash del documento
Code Block
languagejava
firstline1
titleEjemplo de invocación elevación CAdES-A con Hash
linenumberstrue
//Generacion del hash del documento
byte[] originalDocument = FileUtils.readFileToByteArray(new File("pathFile"));
MessageDigest.getInstance("SHA-1");
Byte[]originalDocumentHash = md.digest(originalDocument);

// Se establece la firma
byte[] signature= Base64.decode(FileUtils.readFileToString(new File("pathFile"));
SifeDocument sign = new SifeDocument();
sign.setData(signature);

// Se añade el contenido del documento porque se trata de una firma detached
byte[] extendedDocument = FileUtils.readFileToByteArray(new File("pathFile"));
SifeDocument detachedContent = new SifeDocument();
sign.setDigestAlgorithm(DigestAlgorithm.SHA1);
sign.setDigestValue(originalDocumentHash);

// Especificamos tanto el documento original como la firma y el nivel de elevacion de la firma
ExtensionParameters extensionParameters = new ExtensionParameters();
extensionParameters.setDetachedContent(detachedContent);
extensionParameters.setSignature(sign);
extensionParameters.setSignatureLevel(SignatureLevel.CAdES_A);

SifeDocument  extendedSignature = digitalSignatureServiceClient.extendSignature(extensionParameters);


Método 'verifyCertificate'

Método que verifica un certificado. La respuesta obtenida indica el si el certificado es valido (VALID o INVALID), así como todos los datos de este.

Expand
titleMás detalles

Signatura

CertificateReport verifyCertificate(CertificateParameters params)

Parámetros de invocación

NombreTipoDescripción
paramsObjeto SIFE_1.7_Manual de integración v1.0#CertificateParameters (ver detalle de campos en el apartado de objetos comunes)

Parámetros de respuesta

NombreTipoDescripción
certificateReportObjeto CertificateReport (ver detalle de campos en el apartado de objetos comunes)

Códigos error

Los códigos de error que se obtienen son producidos directamente por la plataforma @firma, estos errores no poseen un código propio de SIFE sino que se devuelve el código devuelvo por la plataform.

Ejemplos de invocación

Code Block
languagejava
firstline1
titleEjemplo de invocación verifyCertificate
linenumberstrue
byte[] certificate = FileUtils.readFileToByteArray(new File("pathFile");

CertificateParameters certificateParameters = new CertificateParameters();
certificateParameters.setCertificate(certificate);

CertificateReport certificateReport = digitalSignatureServiceClient.verifyCertificate(certificateParameters);

Método 'verifySignature'

Verifica una firma contra @firma. Se debe enviar la firma a verificar y el documento original si la firma es detached. Este método puede invocarse pasando como parámetro el contenido completo del documento, a través de su hash o indicando su CCSV.

Se devolverá un informe de verificación con el resultado, indicando si la firma es válida, o si la firma es inválida o la razón por la cual no se ha verificado correctamente la firma.


Expand
titleMás detalles

Signatura

VerificationReport verifySignature(VerificationParameters params)

Parámetros de invocación

NombreTipoDescripción
paramsObjeto SIFE_1.7_Manual de integración v1.0#VerificationParameters (ver detalle de campos en el apartado de objetos comunes)

Parámetros de respuesta

NombreTipoDescripción
verificationReportObjeto SIFE_1.7_Manual de integración v1.0#VerificationReport (ver detalle de campos en el apartado de objetos comunes)

Códigos error

CódigoDescripción
REQUIRED_SIGN_ERRORNo se encuentra la firma en CCSV
NOT_FOUND_ERRORAlgún dato necesario para la validación de la firma no se encuentra en base de datos
REQUIRED_DATA_ERRORDatos del contenido del documento son nulos
REQUIRED_HASH_ERRORFaltan datos para la realización de una firma a partir de HASH

Pueden obtenerse otros códigos de error diferentes a los comentados en la tabla anterior se produce algún error durante el proceso de firma en la plataforma @firma, estos errores no poseen un código propio de SIFE sino que se devuelve el código devuelvo por la plataforma directamente.

Ejemplos de invocación

A continuación se muestra un ejemplo de invocación al método verifySignature de una firma detached y pasando como atributo el contenido completo del documento.

Code Block
languagejava
firstline1
titleEjemplo de invocación verifySignature pasando contenido del documento
linenumberstrue
byte[] originalDocument = FileUtils.readFileToByteArray(new File("pathFile"));		// Contenido del documento en texto plano
byte[] signature = FileUtils.readFileToByteArray(new File("pathFilePass")); 		// La firma en texto plano

SifeDocument originalSifeDocument = new SifeDocument();
originalSifeDocument.setData(originalDocument);

SifeDocument signatureSifeDocument = new SifeDocument();
signatureSifeDocument.setData(signature);

// Pareseamos de formato de firma ASF a formato de firma SIFE.
VerificationParameters verificationParameters = new VerificationParameters();
verificationParameters.setSignatureFormat(SignatureFormat.CAdES);
verificationParameters.setSignature(signatureSifeDocument);
verificationParameters.setDetachedContent(originalSifeDocument);

VerificationReport result = digitalSignatureServiceClient.verifySignature(verificationParameters);


Code Block
titleEjemplo de invocación verifySignature de firma XAdES Manifest mediante documento copmleto
linenumberstrue
byte[] originalDocument = FileUtils.readFileToByteArray(new File("pathFile"));		// Contenido del documento en texto plano
byte[] signature = FileUtils.readFileToByteArray(new File("pathFilePass")); 		// La firma en texto plano

SifeDocument originalSifeDocument = new SifeDocument();
originalSifeDocument.setData(originalDocument);

SifeDocument signatureSifeDocument = new SifeDocument();
signatureSifeDocument.setData(signature);

// Pareseamos de formato de firma ASF a formato de firma SIFE.
VerificationParameters verificationParameters = new VerificationParameters();
verificationParameters.setSignatureFormat(SignatureFormat.XAdES); //Formato de firma XAdES
verificationParameters.setSignature(signatureSifeDocument);
verificationParameters.setDetachedContent(originalSifeDocument);

VerificationReport result = digitalSignatureServiceClient.verifySignature(verificationParameters);



En el caso de que se pase como parámetro el CSV del documento, el contenido de dicho documento se obtendrá de CCSV

Code Block
languagejava
firstline1
titleEjemplo de invocación verifySignature a través de CSV
linenumberstrue
byte[] signature = FileUtils.readFileToByteArray(new File("pathFilePass")); 		// La firma en texto plano

SifeDocument originalSifeDocument = new SifeDocument();
originalSifeDocument.setCsv(CSV);

SifeDocument signatureSifeDocument = new SifeDocument();
signatureSifeDocument.setData(signature);

// Pareseamos de formato de firma ASF a formato de firma SIFE.
VerificationParameters verificationParameters = new VerificationParameters();
verificationParameters.setSignatureFormat(SignatureFormat.CAdES);
verificationParameters.setSignature(signatureSifeDocument);
verificationParameters.setDetachedContent(originalSifeDocument);

VerificationReport result = digitalSignatureServiceClient.verifySignature(verificationParameters);

SifeDocument originalSifeDocument = new SifeDocument();
originalSifeDocument.setData(originalDocument);


La tercera forma de invocar al método verifySignature es a través del Hash del documento. Para ello hay que indicar el algoritmo de digest. A continuación se muestra un ejemplo de invocación utilizando el Hash del documento.

Code Block
languagejava
firstline1
titleEjemplo de invocación verifySignature a través de Hash
linenumberstrue
//Generacion del hash del documento TODO
byte[] originalDocument = FileUtils.readFileToByteArray(new File("pathFile"));
MessageDigest.getInstance("SHA-256");
Byte[]originalDocumentHash = md.digest(originalDocument);

byte[] signature = FileUtils.readFileToByteArray(new File("pathFilePass")); 		// La firma en texto plano

SifeDocument firma = new SifeDocument();
firma.setData(documentSign);

SifeDocument detachedContent = new SifeDocument();
detachedContent.setDigestValue(originalDocumentHash);
detachedContent.setDigestAlgorithm(DigestAlgorithm.SHA256);

// Verificamos la firma con sife
VerificationParameters verificationParameters = new VerificationParameters();
verificationParameters.setSignature(firma);
verificationParameters.setDetachedContent(detachedContent);
verificationParameters.setSignatureFormat(SignatureFormat.CAdES);
		
VerificationReport verificationReport = digitalSignatureServiceClient.verifySignature(verificationParameters);


Code Block
titleEjemplo de invocación verifySignature de XAdES Manifest mediante hash
linenumberstrue
//Generacion de SifeDocuments para la verificación
byte[] originalDocument = FileUtils.readFileToByteArray(new File("pathFile"));
MessageDigest.getInstance("SHA-1"); // El algoritmo del hash a comparar debe ser el mismo que el usado en la firma
Byte[] originalDocumentHash = md.digest(originalDocument);

byte[] signature = FileUtils.readFileToByteArray(new File("pathFilePass")); // La firma en texto plano

SifeDocument firma = new SifeDocument();
firma.setData(documentSign);

SifeDocument detachedContent = new SifeDocument();
detachedContent.setDigestValue(originalDocumentHash);
detachedContent.setDigestAlgorithm(DigestAlgorithm.SHA1); 

// Verificamos la firma con sife
VerificationParameters verificationParameters = new VerificationParameters();
verificationParameters.setSignature(firma);
verificationParameters.setDetachedContent(detachedContent);
verificationParameters.setSignatureFormat(SignatureFormat.XAdES);
		
VerificationReport verificationReport = digitalSignatureServiceClient.verifySignature(verificationParameters);


Método 'wssSign'

Método que permite diferentes acciones sobre una petición a un servicio web. Las acciones que se pueden realizar son las siguientes, pudiéndose ejecutar de forma individual o combinando varias de ellas. A la hora de ejecutar las acciones especificadas, el orden será en el que están añadidas al vector de acciones a ejecutar. Por tanto no es lo mismo ejecutar  [Firma, Cifrado] que  [Cifrado, Firma]

  • Firma: Indicando un certificado, se calcula firma electrónica de las partes indicadas de la petición web. Permite la identificación del firmante y la integridad de la información.
  • Cifrado: Realiza el cifrado de las partes indicadas de la petición web con el certificado indicado. De esta manera se asegura la procedencia de la petición
  • TimeStamp: Realiza un sellado de tiempo de la petición

Expand
titleMás detalles

Signatura

SifeDocument wssSign(WSSSignatureParameters params)

Parámetros de invocación

NombreTipoDescripción
paramsWSSSignatureParameters  Objeto (ver detalle de campos en el apartado de objetos comunes)

Parámetros de respuesta

NombreTipoDescripción
sifeDocSIFE_1.7_Manual de integración v1.0#SifeDocument Objeto (ver detalle de campos en el apartado de objetos comunes)

Códigos error

CódigoDescripción
NO_DATA_ERROREl parámetro document del objeto WSSSignatureParameters es nulo o no tiene datos
INTERNAL_SERVER_ERRORError interno en el servidor
NO_SIGNINGCERTIFICATEALIAS_ERRORWSSAction = 'SIGNATURE' y SigningCertificateAlias es nulo 
BAD_CERTIFICATE_ERRORNo exite el certificado con el alias indicado
NO_ENCRYPTIONCERTIFICATEALIAS_ERRORWSSAction = 'SIGNATURE' y EncryptionCertificateAlias es nulo
STAMP_NOT_AUTHORIZEDEl sello utilizado para la firma no ha sido autorizado previamente

Ejemplos de invocación

A continuación se muestra un ejemplo de invocación al método wssSign en el cual se firma el elemento "Body" de la petición.

Code Block
languagejava
firstline1
titleEjemplo de invocación verifyTimestamp a través de CSV
linenumberstrue
		String cadenaFirma = //petición a firmar
		String aliasCert = // certificado utilizado para la firma
		String [] idToSign = new String[1];
		idToSign[0] = "Body";
		
        System.out.println("BEGIN firmaWSSecurity()");
        System.out.println("Param cadenaFirma: " + cadenaFirma);
        System.out.println("Param aliasCert: " + aliasCert);

        SifeDocument documentoOriginal = new SifeDocument();
        documentoOriginal.setData(cadenaFirma.getBytes("UTF-8"));

        WSSSignatureParameters wsSSignatureParameters = new WSSSignatureParameters();
        List<WSSAction> actions = new ArrayList<>();
        actions.add(WSSAction.SIGNATURE);
        actions.add(WSSAction.TIMESTAMP);
        wsSSignatureParameters.setActions(actions);
        wsSSignatureParameters.setSigningCertificateAlias(aliasCert);
        wsSSignatureParameters.setDocument(documentoOriginal);
        wsSSignatureParameters.setUseSingleCertificate(Boolean.TRUE);

        // partes a firmar asumimos. Se firmará el body
        List<WSSEncryptionPart> parts = new ArrayList<>();
        for (String part : idToSign) {
            WSSEncryptionPart wsSEncryptionPart = new WSSEncryptionPart();
            wsSEncryptionPart.setName(part);
            wsSEncryptionPart.setNamespace("http://schemas.xmlsoap.org/soap/envelope/");
            parts.add(wsSEncryptionPart);
        }
        wsSSignatureParameters.setSignatureParts(parts);

        SifeDocument documentSigned = digitalSignatureServiceClient.wssSign(wsSSignatureParameters);

        // Se valida el resultado
        if (documentSigned != null && documentSigned.getData() != null) {
            System.out.println("Documento firmado " + new String(documentSigned.getData()));
            WSSVerificationParameters vparams = new WSSVerificationParameters();
            vparams.setDocument(documentSigned);
            vparams.setSigningCertificateAlias(aliasCert);

            WSSVerificationReport report = digitalSignatureServiceClient.wssVerify(vparams);
            if (report.getIndication() == Indication.VALID && report.getData() != null) {
                System.out.println("Firma válida");
            } else {
                if (report.getErrors() != null) {
                    for (VerificationError ve : report.getErrors()) {
                        System.out.println("Error code: " + ve.getCode() + " ErrorMsg: " + ve.getDescription());
                    }
                }
            }
        } else {
            System.out.println("Algún problema al generar la firma " + aliasCert + " petición : " + cadenaFirma);
        }
        return new String(documentSigned.getData());


Método 'wssVerify'

Método que permite realizar la validación de una petición WebService firmada.

Expand
titleMás detalles

Signatura

WSSVerificationReport wssVerify(WSSVerificationParametersparams)

Parámetros de invocación

NombreTipoDescripción
paramsWSSVerificationParametersparams  Objeto (ver detalle de campos en el apartado de objetos comunes)

Parámetros de respuesta

NombreTipoDescripción
reportWSSVerificationReport Objeto (ver detalle de campos en el apartado de objetos comunes)

Códigos error

CódigoDescripción
NO_DATA_ERROREl parámetro document del objeto WSSSignatureParameters es nulo o no tiene datos
INTERNAL_SERVER_ERRORError interno en el servidor
NO_SIGNINGCERTIFICATEALIAS_ERRORWSSAction = 'SIGNATURE' y SigningCertificateAlias es nulo 
BAD_CERTIFICATE_ERRORNo exite el certificado con el alias indicado
NO_ENCRYPTIONCERTIFICATEALIAS_ERRORWSSAction = 'SIGNATURE' y EncryptionCertificateAlias es nulo
STAMP_NOT_AUTHORIZEDEl sello utilizado para la firma no ha sido autorizado previamente

Ejemplos de invocación

A continuación se muestra un ejemplo de invocación al método wssSign en el cual se firma el elemento "Body" de la petición.

Code Block
languagejava
firstline1
titleEjemplo de invocación verifyTimestamp a través de CSV
linenumberstrue
		String cadenaFirma = //petición a firmar
		String aliasCert = // certificado utilizado para la firma
		String [] idToSign = new String[1];
		idToSign[0] = "Body";
		
        System.out.println("BEGIN firmaWSSecurity()");
        System.out.println("Param cadenaFirma: " + cadenaFirma);
        System.out.println("Param aliasCert: " + aliasCert);

        SifeDocument documentoOriginal = new SifeDocument();
        documentoOriginal.setData(cadenaFirma.getBytes("UTF-8"));

        WSSSignatureParameters wsSSignatureParameters = new WSSSignatureParameters();
        List<WSSAction> actions = new ArrayList<>();
        actions.add(WSSAction.SIGNATURE);
        actions.add(WSSAction.TIMESTAMP);
        wsSSignatureParameters.setActions(actions);
        wsSSignatureParameters.setSigningCertificateAlias(aliasCert);
        wsSSignatureParameters.setDocument(documentoOriginal);
        wsSSignatureParameters.setUseSingleCertificate(Boolean.TRUE);

        // partes a firmar asumimos. Se firmará el body
        List<WSSEncryptionPart> parts = new ArrayList<>();
        for (String part : idToSign) {
            WSSEncryptionPart wsSEncryptionPart = new WSSEncryptionPart();
            wsSEncryptionPart.setName(part);
            wsSEncryptionPart.setNamespace("http://schemas.xmlsoap.org/soap/envelope/");
            parts.add(wsSEncryptionPart);
        }
        wsSSignatureParameters.setSignatureParts(parts);

        SifeDocument documentSigned = digitalSignatureServiceClient.wssSign(wsSSignatureParameters);

        // Se valida el resultado
        if (documentSigned != null && documentSigned.getData() != null) {
            System.out.println("Documento firmado " + new String(documentSigned.getData()));
            WSSVerificationParameters vparams = new WSSVerificationParameters();
            vparams.setDocument(documentSigned);
            vparams.setSigningCertificateAlias(aliasCert);

            WSSVerificationReport report = digitalSignatureServiceClient.wssVerify(vparams);
            if (report.getIndication() == Indication.VALID && report.getData() != null) {
                System.out.println("Firma válida");
            } else {
                if (report.getErrors() != null) {
                    for (VerificationError ve : report.getErrors()) {
                        System.out.println("Error code: " + ve.getCode() + " ErrorMsg: " + ve.getDescription());
                    }
                }
            }
        } else {
            System.out.println("Algún problema al generar la firma " + aliasCert + " petición : " + cadenaFirma);
        }
        return new String(documentSigned.getData());


Servicios LoginServiceJaxRs

Identificación SSL

Conjunto de métodos que permiten realizar operaciones identificación mediante un certificado ssl. Se trata de un servicio REST que se encuentra disponible en v1/login/.

Método 'verifyCertificateForAuthentication'

Verifica que el certificado presentado para la identificación es válido. La respuesta proporciona un token con la información general del certificado y su estado.


Expand
titleMás detalles

Signatura

AuthenticationOperationResult verifyCertificateForAuthentication(AuthenticationParameters params)

Parámetros de invocación

NombreTipoDescripción
paramsAuthenticationParameters  Objeto (ver detalle de campos en el apartado de objetos comunes)


Parámetros de respuesta

NombreTipoDescripción
result1232208140Objeto (ver detalle de campos en el apartado de objetos comunes)


Códigos error

CódigoDescripción
404La aplicación indicada no existe


Ejemplos de invocación

A continuación se muestra un ejemplo de invocación al método verifyCertificateForAuthentication en el cual se verifica la validez de un certificado.

Code Block
languagejava
firstline1
titleEjemplo de invocación verifyTimestamp a través de CSV
linenumberstrue
String accountId = "account1";	
X509Certificate chain[] = (X509Certificate[]) request.getAttribute("javax.servlet.request.X509Certificate");

AuthenticationParameters params = new AuthenticationParameters();
params.setTargetAccountId(accountId);
params.setCertificates(Arrays.asList(chain));
	
AuthenticationOperationResult result = loginServiceClient.verifyCertificateForAuthentication(params);


Anexos

Objectos Comunes

Objeto 
Anchor
SignatureParameters
SignatureParameters
'SignatureParameters'

NombreTipoDescripción
claimedSignerRoleList<String>

Lista de roles del firmante

digestAlgorithmObjeto SIFE_1.7_Manual de integración v1.0#DigestAlgorithm Algoritmo de digest utilizado para calcular el hash
documentObjeto SIFE_1.7_Manual de integración v1.0#SifeDocument Origen de datos a firmar
detachedContentObjeto SIFE_1.7_Manual de integración v1.0#SifeDocument Origen de datos correspondiente con la firma en caso de firmas detached
signatureLevelObjeto SIFE_1.7_Manual de integración v1.0#SignatureLevel

Nivel deseado para la firma

Ej: B,T,XL, A etc

signaturePackagingObjeto SIFE_1.7_Manual de integración v1.0#SignaturePackagingEmpaquetado de la firma
signatureProfileString

Preconfiguracion de parametros de firma en servidor. NO tienen preferencia sobre los definos en SignatureParameters como 'digestAlgorithm'. 

Ej: si signatureProfile.digestAlgorithm=SHA256 y signatureParameters.digestAlgorithm=SHA512 se utilizara SHA512

signaturePolicyObjeto SIFE_1.7_Manual de integración v1.0#Policy Política de firma a incluir
signingCertificateAliasStringAlias del certificado servidor para utilizar en la firma
signingDateXMLGregorianCalendarFecha de firma
userIdentifierStringNIF del peticionario. Debera estar habilitado

Objeto 
Anchor
SifeDocument
SifeDocument
 'SifeDocument'

NombreTipoDescripción
digestValuebyte []Resumen del documento (hash)
digestAlgorithmObjeto SIFE_1.7_Manual de integración v1.0#DigestAlgorithmAlgoritmo de digest utilizado para calcular el hash
databyte []Contenido completo del documento
mimetypeString

Tipo del documento.

Ej: application/pdf, application/xml

csvStringIdentificador del documento en CCSV
csvSignatureIdStringIdentificador de la firma del documento en CCSV
sifeIdentiferLongIdentificador interno de SIFE para documentos temporales
nameStringNombre del documento

Objeto 
Anchor
Policy
Policy
 'Policy'

NombreTipoDescripción
digestAlgorithmObjeto SIFE_1.7_Manual de integración v1.0#DigestAlgorithmAlgoritmo  de digest utilizada para calcular el hash
digestValuebyte[]Resumen del documento (hash)
identifierStringIdentificador de la política
qualifierStringURL del documento externo, normalmente un PDF
ageBooleanIndica si aplicar la politica de la AGE. Valor por defecto, false
facturaeBooleanIndica si aplicar la politica de factura electrónica. Valor por defecto, false

Objeto 
Anchor
ExtensionParameters
ExtensionParameters
 'ExtensionParameters'

NombreTipoDescripción
signatureObjeto SIFE_1.7_Manual de integración v1.0#SifeDocumentFirma a elevar
detachedContentObjeto SIFE_1.7_Manual de integración v1.0#SifeDocumentOrigen de datos correspondiente con la firma en caso de firmas detached
signatureLevelObjeto SignatureLevelNivel deseado para la firma (T,XL, A)

Objeto 
Anchor
TimestampParameters
TimestampParameters
 'TimestampParameters'

NombreTipoDescripción
documentObjeto SIFE_1.7_Manual de integración v1.0#SifeDocumentOrigen de datos a sellar
timestampFormObjeto SIFE_1.7_Manual de integración v1.0#TimestampFormTipo de sello de tiempo XML o RFC3161 que soporta TS@. Por defecto RFC3161
digestAlgorithmObjeto DigestAlgorithmAlgoritmo de digest. Si no viene valor se asigna el del documento
previousTimestampTokenbyte []Sello de tiempo a resellar
previousTimestampFormObjeto SIFE_1.7_Manual de integración v1.0#TimestampFormTipo de sello de tiempo a resellar

Objeto 
Anchor
TimestampResponse
TimestampResponse
 'TimestampResponse'

NombreTipoDescripción
indicationObjeto SIFE_1.7_Manual de integración v1.0#IndicationResultado global de la solicitud
errorsList<SIFE_1.7_Manual de integración v1.0#VerificationErrorMensajes de error en caso de haberlos
timestampTokenObjeto SIFE_1.7_Manual de integración v1.0#TimestampTokenContenido del token RFC3161 emitido por la TSA
timestampTokenXMLStringContenido del sello de tiempo XML emitido por la TSA

Objeto 
Anchor
VerificationError
VerificationError
 'VerificationError'

NombreTipoDescripción
codeStringCódigo del error producido
descriptionStringDescripción del error producido

Objeto 
Anchor
TimestampToken
TimestampToken
 'TimestampToken'

NombreTipoDescripción
serialNumberStringIdentificador del sello de tiempo
nonceString
expiresDateFecha de expiración
generationDateDateFecha de generación
encodedbyte[]Contenido del token
hashbyte[]Hash del mensaje
contentbyte[]Contenido sobre el que se han realizado las acciones
tsaNameString
tsaPolicyOIDString
certificatesList<byte[]>Certificados utilizados

Objeto 
Anchor
TimestampStatus
TimestampStatus
 'TimestampStatus'

NombreTipoDescripción
serialNumberStringNumero de serie asignado por el prestador al token
indicationSIFE_1.7_Manual de integración v1.0#IndicationResultado global de la validación del sello
errorsList<SIFE_1.7_Manual de integración v1.0#VerificationError>Errores en la verificación
typeSIFE_1.7_Manual de integración v1.0#TimestampType

Tipo de sello, de firma o de archivo

creationDateDateFecha del sellado de tiempo
tsaCertificateCertificateStatusEstado del certificado
timestampTokenDatabyte[]Datos del sellado de tiempo
timestampTokenTimestampTokenToken de sello

Objeto 
Anchor
CertificateStatus
CertificateStatus
 'CertificateStatus'

NombreTipoDescripción
serialNumberStringNúmero de serie
subjectPrincipalStringTitular
issuerPrincipalStringEmisor
errorsList<VerificationError>Errores en la verificación
validFromDateFecha desde la que es válido
validTo DateFecha hasta la que es válido
elementsMap<String, String>Cada uno de los elementos extraídos del certificado (Vacío para certificados de sello de tiempo
statusStatusEstado de validación
x509Certificatebyte[]Contenido del certificado en formato DER

Objeto 
Anchor
CertificateParameters
CertificateParameters
 'CertificateParameters'

NombreTipoDescripción
certificatebyte[]Certificado a validar

Objeto 
Anchor
CertificateReport
CertificateReport
 'CertificateReport'

NombreTipoDescripción
indicationIndicationResultado global de la validación del certificado
certificateStatusList<SIFE_1.7_Manual de integración v1.0#CertificateStatus>Lista del estado de los certificados validados
errorsList<VerificationError>Errores en la verificación

Objeto 
Anchor
VerificationParameters
VerificationParameters
 'VerificationParameters'

NombreTipoDescripción
signatureSifeDocumentFirma a verificar
detachedContentSIFE_1.7_Manual de integración v1.0#SifeDocumentContenido del documento al que pertenece la firma en el caso de ser una firma detached
signatureFormatSIFE_1.7_Manual de integración v1.0#SignatureFormatFormato de firma. Solo requerido para XAdES

Objeto 
Anchor
VerificationReport
VerificationReport
 'VerificationReport'

NombreTipoDescripción
validationTimeDateFecha en la que se ha realizado la validación de la firma 
signaturesList<SignatureStatus>Estado de cada una de las firmas que contiene la firma original
indicationIndicationResultado global de la validación de la firma
errorsList<VerificationError>Errores en la verificación
signatureLevelSignatureLevelNivel de firma
signatureFormatSignatureFormatFormato de firma

Objeto 
Anchor
SignatureStatus
SignatureStatus
 'SignatureStatus'

NombreTipoDescripción
indicationIndicationResultado global de validación de la firma
errorsList<VerificationError>Errores en la verificación
signingDateDateFecha de firma
signatureExpirationDateDateFecha de caducidad de la firma. Correspondera a la fecha de firma o a la fecha del sello de tiempo si la hay
policyStringDatos de la politica de firma seguida
signatureLevelSignatureLevelNivel de firma
signingCertificateCertificateStatusCertificado de firma utilizado
certificatesList<CertificateStatus>Certificados procesados
timestampsList<TimestampStatus>Sellos de tiempo de la firma (si los hay)

Objeto 
Anchor
WSSSignatureParameters
WSSSignatureParameters
 'WSSSignatureParameters'

NombreTipoDescripción
actionsList<WSSAction>Acciones a realizar sobre el mensaje. Por defecto SIGNATURE. Las acciones pueden combinarse, por ejemplo [ENCRYPTION, SIGNATURE] o [SIGNATURE, ENCRYPTION]
documentSIFE_1.7_Manual de integración v1.0#SifeDocumentOrigen de datos a firmar. Solo admite datos completos, NO admite ni CSV ni digest
keyIdentifierTypeWSSKeyIdentifierTypeTipo de identificación para la firma
userIdentifierStringNIF del ordenante de la firma
useSingleCertificateBooleanIndica si se usa un certificado simple para la firma, o la cadena completa de certificacion. Por defecto true
signingCertificateAliasStringAlias del certificado servidor para utilizar en la firma
digestAlgorithmDigestAlgorithmAlgoritmo de digest para firma
signatureAlgorithmSIFE_1.7_Manual de integración v1.0#SignatureAlgorithmNombre (URI) del algoritmo de encriptación de la firma a utilizar. En el caso de que no se le asigne valor a este parámetro, se establecerá por un proceso automático de detección.
signaturePartsList<WSSEncryptionPart>Controla como se cifra el elemento
simmetricEncryptionAlgorithmStringNombre el algoritmo simétrico de encriptación a utilizar. Este algoritmo de encriptación es usado para encriptar los datos. Si la variable se encuentra vacía se utilizará AES128.
keyEncryptionAlgorithmKeyEncryptionAlgorithmTipo de algoritmo RSA para envolver la clave simetrica.
encryptionCertificateAliasStringAlias del certificado a usar para cifrado utilizando un algoritmo asimetrico
encryptionPartsList<WSSEncryptionPart>Controla como se cifra el elemento

Objeto 
Anchor
WSSEncryptionPart
WSSEncryptionPart
 'WSSEncryptionPart'

NombreTipoDescripción
nameStringNombre local del elemento a cifrar
namespaceStringNamespace del elemento local a cifrar
encryptionModifierStringEncryption modifier. Valores "Element" o "Content"

Objeto 
Anchor
WSSVerificationParametersparams
WSSVerificationParametersparams
 'WSSVerificationParametersparams'

NombreTipoDescripción
documentSifeDocumentPetición WSS firmada
decryptionCertificateAliasStringAlias del certificado que se va a utilizar para descifrar
signingCertificateAliasStringAlias del certificado a utilizar para validar la firma
userIdentifierStringIdentificador del usuario 

Objeto 
Anchor
WSSVerificationReport
WSSVerificationReport
 'WSSVerificationReport'

NombreTipoDescripción
indicationIndicationResultado global de validación
errorsList<VerificationError>Errores en la verificación
databyte[]

Objeto 
Anchor
AuthenticationParameters
AuthenticationParameters
 'AuthenticationParameters'

NombreTipoDescripción
targetAccountIdStringIdentificador de la aplicación que realiza la llamada al servicio
certificatesList<byte[]>Lista con el contenidos de los certificados a verificar.


Objeto 
Anchor
AuthenticationOperationResult
AuthenticationOperationResult
 'AuthenticationOperationResult'

NombreTipoDescripción
tokenString

Token JWT con el resumen de la verificación del certificado codificado en base64

Code Block
languagejava
themeEclipse
titleToken
{
  "statusCode": "GOOD",
  "subStatusCode": null,
  "inResponseTo": null,
  "adienceRestriction": null,
  "country": "ES",
  "message": null,
  "hashCode": null,
  "notBefore": "2019-12-18T16:04:14.627Z",
  "notOnOrAfter": "2019-12-18T17:04:14.627Z",
  "personalAttributes": {
    "eIdentifier": "Q0100000I",
    "givenName": "FUFASA",
    "surname1": "",
    "surname2": "",
    "inheritedFamilyName": null,
    "adoptedFamilyName": null,
    "citizenQAAlevel": "3",
    "certificateType": "11",
    "representedIdentifier": "10000322Z",
    "representedGivenName": "MANUELA",
    "representedSurname1": "BLANCO",
    "representedSurname2": "VIDAL",
  },  "authority" : "Agencia Notarial de Certificacion S.L.U. - CIF B83395988",
    "failcertificateTypeDesc": false
}

Tipos enumerados

...

"ANCERT PF Personal Autenticación 2010",
    "certificateUse": "digitalSignature",
    "classification": "ESIG",
    "organizationalUnit": "Autorizado ante Notario NOTARIO FICTICIO",
    "policy": "1.3.6.1.4.1.18920.1.1.1.2.2",
    "policyVersion": "61",
    "serialNumber": "149600354636033510397093140076022879569",
    "validFromDate": "2019-05-02 jue 12:41:51 +0200",
    "validToDate": "2022-05-02 jue 12:41:51 +0200",
  },
  "fail": false
}


Tipos enumerados

Enum 
Anchor
SignatureLevel
SignatureLevel
 'SignatureLevel'

NombreValor
XAdES_CXAdES_C
XAdES_XXAdES_X
XAdES_XLXAdES_XL
XAdES_AXAdES_A
XAdES_BASELINE_LTAXAdES_BASELINE_LTA
XAdES_BASELINE_LTXAdES_BASELINE_LT
XAdES_BASELINE_TXAdES_BASELINE_T
XAdES_BASELINE_BXAdES_BASELINE_B
CAdES_BASELINE_LTACAdES_BASELINE_LTA
CAdES_BASELINE_LTCAdES_BASELINE_LT
CAdES_BASELINE_TCAdES_BASELINE_T
CAdES_BASELINE_BCAdES_BASELINE_B
CAdES_CCAdES_C
CAdES_XCAdES_X
CAdES_XLCAdES_XL
CAdES_ACAdES_A
PAdES_BASELINE_LTAPAdES_BASELINE_LTA
PAdES_BASELINE_LTPAdES_BASELINE_LT
PAdES_BASELINE_TPAdES_BASELINE_T
PAdES_BASELINE_BPAdES_BASELINE_B
PAdES_LTVPAdES_LTV
ASiC_S_BASELINE_LTAASiC_S_BASELINE_LTA
ASiC_S_BASELINE_LTASiC_S_BASELINE_LT
ASiC_S_BASELINE_TASiC_S_BASELINE_T
ASiC_S_BASELINE_BASiC_S_BASELINE_B
ASiC_E_BASELINE_LTAASiC_E_BASELINE_LTA
ASiC_E_BASELINE_LTASiC_E_BASELINE_LT
ASiC_E_BASELINE_TASiC_E_BASELINE_T
ASiC_E_BASELINE_BASiC_E_BASELINE_B
WSSWSS
CMSCMS_CMS
XMLDSIGXMLDSIG_XMLDSIG
PAdES_BASIC

PAdES_BASIC

CAdES_BESCAdES_BES
CAdES_EPESCAdES_EPES
CAdES_TCAdES_T
XAdES_BESXAdES_BES
XAdES_EPESXAdES_EPES
XAdES_TXAdES_T
PAdES_BESPAdES_BES
PAdES_EPESPAdES_EPES
PAdES_TPAdES_T
ODFODF

Enum 
Anchor
SignaturePackaging
SignaturePackaging
 'SignaturePackaging'

NombreValor
ENVELOPEDENVELOPED
ENVELOPINGENVELOPING
DETACHEDDETACHED

Enum 
Anchor
DigestAlgorithm
DigestAlgorithm
 'DigestAlgorithm'

NombreValor1jceName
SHA1SHA1SHA-1
SHA224SHA224
SHA256SHA256SHA-256
SHA384SHA384SHA-384
SHA512SHA512SHA-512
MD2MD2MD2
MD5MD5MD5

Enum 
Anchor
TimestampForm
TimestampForm
 'TimestampForm'

NombreValor
XMLXML
RFC3161RFC3161

Enum 
Anchor
Indication
Indication
 'Indication'

NombreValor
VALIDVALID
INVALIDINVALID

Enum 
Anchor
TimestampType
TimestampType
 'TimestampType'

NombreValor
SIGNATURE_TIMESTAMP

SIGNATURE_TIMESTAMP

ARCHIVE_TIMESTAMPARCHIVE_TIMESTAMP

Enum 
Anchor
Status
Status
 'Status'

NombreValor
GOODGOOD
REVOKEDREVOKED
EXPIREDEXPIRED
UNKNOWNUNKNOWN
NOT_CHECKEDNOT_CHECKED

Enum 
Anchor
SignatureFormat
SignatureFormat
 'SignatureFormat'

NombreValor
XAdESXAdES
CAdESCAdES
PAdESPAdES
ASiC_SASiC_S
ASiC_EASiC_E
WSSWSS
CMSCMS

Enum 
Anchor
WSSAction
WSSAction
 'WSSAction'

NombreValor
ENCRYPTIONENCRYPTION
SIGNATURESIGNATURE
TIMESTAMPTIMESTAMP

Enum 
Anchor
WSSKeyIdentifierType
WSSKeyIdentifierType
 'WSSKeyIdentifierType'

NombreValor
BST_DIRECT_REFERENCE1
ISSUER_SERIAL2
X509_KEY_IDENTIFIER3
SKI_KEY_IDENTIFIER4
THUMBPRINT_IDENTIFIER8
KEY_VALUE13

Enum 
Anchor
SignatureAlgorithm
SignatureAlgorithm
 'SignatureAlgorithm'

NombreValor
RSARSA
DSADSA
RSA_SHA256RSA-SHA256

Enum 
Anchor
KeyEncryptionAlgorithm
KeyEncryptionAlgorithm
 'KeyEncryptionAlgorithm'

NombreValor
RSA15RSA15
RSAOEPRSAOEP
RSAOAEP_XENC11RSAOAEP_XENC11

...