5.- Servicios SIFE

5.- Servicios SIFE

ÍNDICE DE SERVICIOS

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.

Ejemplo de invocación firma CAdES básica
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.

Signatura

SifeDocument sign(SignatureParameters params)

Parámetros de invocación

Nombre

Tipo

Descripción

Nombre

Tipo

Descripción

params

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

Parámetros de respuesta

Nombre

Tipo

Descripción

Nombre

Tipo

Descripción

signedDocument

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ódigo

Descripción

Código

Descripción

NO_SIGNATUREPROFILE_ERROR

No existe el perfil seleccionado para realizar la firma

NO_SIGNATURELEVEL_ERROR

El valor de signatureLevel de params es nulo

BAD_SIGNATURE_PACKAGING_ERROR

El método de packaging elegido no es compatible con el tipo de firma elegido

NOT_FOUND_ERROR

Error al obtener datos de CCSV

REQUIRED_DATA_ERROR

Datos requeridos para la realización de la firma son nulos

REQUIRED_HASH_ERROR

Faltan datos para la realización de una firma a partir de HASH

BAD_CERTIFICATE_ERROR

El existe un certificado con el alias establecido en el keystore

REQUIRED_SIGN_ERROR

El documento no tiene firma asociada en CCSV

STAMP_NOT_AUTHORIZED

El 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.

Ejemplo de invocación firma CAdES básica
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);
Ejemplo de invocación firma XAdES Manifest utilizando documento completo.
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.

Ejemplo de invocación firma usando Hash
//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);
Ejemplo de invocación de firma XAdES nivel XAdES_A mediante hash SHA-512
//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.

Ejemplo de invocación firma usando CSV
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

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.

Se debe enviar la firma a elevar, el nivel deseado, y en caso de firmas detached el documento original. También permite resellar un documento cuando la firma sea ya de nivel A.

Como ocurre en el caso de la firma, en el caso de que se trate de una firma detached, se puede realizar su elevación a partir del documento original completo, a través del Hash del documetno o con su CSV. En el caso de que realice a través del CSV el contenido del documento almacenado en sifeDocument.setData(originalDocument) y sifeDocument.setDigestValue(originalDocumentHash) será ignorado. 

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

Signatura

SifeDocument extendSignature (ExtensionParameters params)

Parámetros de invocación

Nombre

Tipo

Descripción

Nombre

Tipo

Descripción

params

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

Parámetros de respuesta

Nombre

Tipo

Descripción

Nombre

Tipo

Descripción

signedDocument

SifeDocument

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ódigo

Descripción

Código

Descripción

REQUIRED_SIGN_ERROR

El documento no tiene firma asociada en CCSV

NOT_FOUND_ERROR

Error al obtener datos de CCSV

REQUIRED_DATA_ERROR

Datos requeridos para la realización de la firma son nulos

REQUIRED_HASH_ERROR

Faltan datos para la realización de una firma a partir de HASH

BAD_CERTIFICATE_ERROR

El 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. 

Ejemplo de invocación elevación CAdES-A documento completo
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

Ejemplo de invocación elevación CAdES-A con Hash
//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.

Signatura

CertificateReport verifyCertificate(CertificateParameters params)

Parámetros de invocación

Nombre

Tipo

Descripción

Nombre

Tipo

Descripción

params

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

Parámetros de respuesta

Nombre

Tipo

Descripción

Nombre

Tipo

Descripción

certificateReport

Objeto 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

Ejemplo de invocación verifyCertificate
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.

 

Signatura

VerificationReport verifySignature(VerificationParameters params)

Parámetros de invocación

Nombre

Tipo

Descripción

Nombre

Tipo

Descripción

params

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

Parámetros de respuesta

Nombre

Tipo

Descripción

Nombre

Tipo

Descripción

verificationReport

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

Códigos error

Código

Descripción

Código

Descripción

REQUIRED_SIGN_ERROR

No se encuentra la firma en CCSV

NOT_FOUND_ERROR

Algún dato necesario para la validación de la firma no se encuentra en base de datos

REQUIRED_DATA_ERROR

Datos del contenido del documento son nulos

REQUIRED_HASH_ERROR

Faltan 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.

Ejemplo de invocación verifySignature pasando contenido del documento
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);
Ejemplo de invocación verifySignature de firma XAdES Manifest mediante documento copmleto
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

Ejemplo de invocación verifySignature a través de CSV
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.

Ejemplo de invocación verifySignature a través de Hash
//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);
Ejemplo de invocación verifySignature de XAdES Manifest mediante hash
//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

 

Signatura

SifeDocument wssSign(WSSSignatureParameters params)

Parámetros de invocación

Nombre

Tipo

Descripción

Nombre

Tipo

Descripción

params

WSSSignatureParameters  Objeto (ver detalle de campos en el apartado de objetos comunes)

Parámetros de respuesta

Nombre

Tipo

Descripción

Nombre

Tipo

Descripción

sifeDoc

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

Códigos error

Código

Descripción

Código

Descripción

NO_DATA_ERROR

El parámetro document del objeto WSSSignatureParameters es nulo o no tiene datos

INTERNAL_SERVER_ERROR

Error interno en el servidor

NO_SIGNINGCERTIFICATEALIAS_ERROR

WSSAction = 'SIGNATURE' y SigningCertificateAlias es nulo 

BAD_CERTIFICATE_ERROR

No exite el certificado con el alias indicado

NO_ENCRYPTIONCERTIFICATEALIAS_ERROR

WSSAction = 'SIGNATURE' y EncryptionCertificateAlias es nulo

STAMP_NOT_AUTHORIZED

El 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.

Ejemplo de invocación verifyTimestamp a través de CSV
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.

Signatura

WSSVerificationReport wssVerify(WSSVerificationParametersparams)

Parámetros de invocación

Nombre

Tipo

Descripción

Nombre

Tipo

Descripción

params

WSSVerificationParametersparams  Objeto (ver detalle de campos en el apartado de objetos comunes)

Parámetros de respuesta

Nombre

Tipo

Descripción

Nombre

Tipo

Descripción

report

WSSVerificationReport Objeto (ver detalle de campos en el apartado de objetos comunes)

Códigos error

Código

Descripción

Código

Descripción

NO_DATA_ERROR

El parámetro document del objeto WSSSignatureParameters es nulo o no tiene datos

INTERNAL_SERVER_ERROR

Error interno en el servidor

NO_SIGNINGCERTIFICATEALIAS_ERROR

WSSAction = 'SIGNATURE' y SigningCertificateAlias es nulo 

BAD_CERTIFICATE_ERROR

No exite el certificado con el alias indicado

NO_ENCRYPTIONCERTIFICATEALIAS_ERROR

WSSAction = 'SIGNATURE' y EncryptionCertificateAlias es nulo

STAMP_NOT_AUTHORIZED

El 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.

Ejemplo de invocación verifyTimestamp a través de CSV
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.

 

Signatura

AuthenticationOperationResult verifyCertificateForAuthentication(AuthenticationParameters params)

Parámetros de invocación

Nombre

Tipo

Descripción

Nombre

Tipo

Descripción

params

AuthenticationParameters  

Objeto (ver detalle de campos en el apartado de objetos comunes)

Parámetros de respuesta

Nombre

Tipo

Descripción

Nombre

Tipo

Descripción

result

AuthenticationOperationResult

Objeto (ver detalle de campos en el apartado de objetos comunes)

Códigos error

Código

Descripción

Código

Descripción

404

La 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.

Ejemplo de invocación verifyTimestamp a través de CSV
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 
'SignatureParameters'

Nombre

Tipo

Descripción

Nombre

Tipo

Descripción

claimedSignerRole

List<String>

Lista de roles del firmante

digestAlgorithm

Objeto SIFE_1.7_Manual de integración v1.0#DigestAlgorithm 

Algoritmo de digest utilizado para calcular el hash

document

Objeto SIFE_1.7_Manual de integración v1.0#SifeDocument 

Origen de datos a firmar

detachedContent

Objeto SIFE_1.7_Manual de integración v1.0#SifeDocument 

Origen de datos correspondiente con la firma en caso de firmas detached

signatureLevel

Objeto SIFE_1.7_Manual de integración v1.0#SignatureLevel

Nivel deseado para la firma

Ej: B,T,XL, A etc

signaturePackaging

Objeto SIFE_1.7_Manual de integración v1.0#SignaturePackaging

Empaquetado de la firma

signatureProfile

String

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

signaturePolicy

Objeto SIFE_1.7_Manual de integración v1.0#Policy 

Política de firma a incluir

signingCertificateAlias

String

Alias del certificado servidor para utilizar en la firma

signingDate

XMLGregorianCalendar

Fecha de firma

userIdentifier

String

NIF del peticionario. Debera estar habilitado

Objeto 
 'SifeDocument'

Nombre

Tipo

Descripción

Nombre

Tipo

Descripción