Saltar al contenido principal
Versión: Siguiente

Ejemplos DSS API

A continuación puedes ver unos ejemplos de llamadas SOAP al servicio. Todas las llamadas de los ejemplos son SOAP 1.2 mediante autenticación por usuario y contraseña.

GetAccesibleCertificates: Recupera el listado de certificados a los que el usuario autenticado tiene acceso. El siguiente ejemplo devuelve los certificados a los que el usuario username@domain tiene permisos en el servicio de firma. Estos certificados son aquellos personales del usuario y aquellos a los que tiene acceso por políticas.

Petición
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:urn="urn:evolium:redtrust:dss:ws">
<soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:UsernameToken wsu:Id="0001">
<wsse:Username>[USERNAME]</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">[PSSWORD]</wsse:Password>
<wsu:Created>2024-11-15T11:28:30.080Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
<wsa:Action>urn:evolium:redtrust:dss:ws/RTDSSService/GetAccessibleCertificates</wsa:Action>
<wsa:To>https://[IP_REDTRUST]:8080/RTDSSService.svc/basic</wsa:To>
</soap:Header>
<soap:Body>
<urn:GetAccessibleCertificates/>
</soap:Body>
</soap:Envelope>
Respuesta
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">urn:evolium:redtrust:dss:ws/RTDSSService/GetAccessibleCertificatesResponse</a:Action>
</s:Header>
<s:Body>
<GetAccessibleCertificatesResponse xmlns="urn:evolium:redtrust:dss:ws">
<Result xmlns:b="http://schemas.datacontract.org/2004/07/RTDSSService" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<b:ResultStatus>SUCCESS</b:ResultStatus>
<b:ResultMessage>Operation finalized successfully</b:ResultMessage>
<b:ResultData i:type="b:ArrayOfCertificate">
<b:Certificate>
<b:X509Data>...</b:X509Data>
<b:alias>EIDAS CERTIFICADO PRUEBAS - 99999999R</b:alias>
<b:certificateHandler>6017</b:certificateHandler>
<b:expiration>2024-11-05T14:04:20</b:expiration>
<b:issuer>Ceres</b:issuer>
<b:needPin>false</b:needPin>
<b:needReason>false</b:needReason>
<b:subject>EIDAS CERTIFICADO PRUEBAS - 99999999R</b:subject>
<b:thumbprint>06F13CCD80E271D5355B3BEA322B8CBCE25B35F6</b:thumbprint>
<b:type>PRIVATE</b:type>
</b:Certificate>
</b:ResultData>
<b:TotalItems>1</b:TotalItems>
</Result>
</GetAccessibleCertificatesResponse>
</s:Body>
</s:Envelope>

En la respuesta obtienes un objeto Result, con un ResultStatus en estado success que indica que no se ha producido ningún error. También obtienes un ResultMessage con un mensaje descriptivo y un objeto ResultData que es una lista de objetos Certificate.

Cada objeto Certificate contiene la información necesaria para su uso. Por ejemplo los siguientes:

ParámetrosDescripción
needPinPara saber si necesita PIN para su uso.
thumbprintIdentificador usado en SignHash, SignRequest expiration para saber si está expirado o no.
aliasNombre que se le ha dado al certificado desde la configuración de Redtrust.
issue o subjectInformación extraída directamente del certificado para esos campos o el propio thumbprint.
X509DataParte pública del certificado. El contenido de este atributo está codificado en Base64 para poder incluirlo en la respuesta.

Firma hash

Genera una firma PKCS#1 a partir de un hash. Los certificados permitidos para la firma son los obtenidos en el método GetAccesibleCertificates, y para realizar la llamada se puede indicar tanto el id como el thumbprint del certificado escogido.

Requisitos

  • La firma de hash debe estar habilitada en el servidor.
  • Debe existir un certificado con el identificador de la petición.
  • Debe existir un usuario username@domain.
  • Debe existir una política de uso que permita al usuario hacer uso del certificado para la firma de documentos o utilizar un certificado personal del usuario.
nota

La funcionalidad de firma de hash no viene activada por defecto con la licencia del servicio de firma y se ha de solicitar al equipo de soporte.

Petición
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:urn="urn:evolium:redtrust:dss:ws">
<soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:UsernameToken wsu:Id="UsernameToken-5F01A1638C9F9A33A1173167092288930">
<wsse:Username>[USERNAME]</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">[PSSWORD]</wsse:Password>
<wsu:Created>2024-11-15T11:42:02.889Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
<wsa:Action>urn:evolium:redtrust:dss:ws/RTDSSService/SignHash</wsa:Action>
<wsa:To>https://[IP_REDTRUST]:8080/RTDSSService.svc/basic</wsa:To>
</soap:Header>
<soap:Body>
<urn:SignHash>
<!--Optional:-->
<urn:toSignHashB64>ybWpO/j3yCfUhzWEWqdHcDgyQ8l5CWwea6Hj+GpI2CA=</urn:toSignHashB64>
<!--Optional:-->
<urn:thumbprint>06F13CCD80E271D5355B3BEA322B8CBCE25B35F6</urn:thumbprint>
<!--Optional:-->
<!--<urn:certificatePin>?</urn:certificatePin>-->
<!--Optional:-->
<urn:algorithm>RSA_SHA256</urn:algorithm>
</urn:SignHash>
</soap:Body>
</soap:Envelope>
Respuesta
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">urn:evolium:redtrust:dss:ws/RTDSSService/SignHashResponse</a:Action>
</s:Header>
<s:Body>
<SignHashResponse xmlns="urn:evolium:redtrust:dss:ws">
<Result xmlns:b="http://schemas.datacontract.org/2004/07/RTDSSService" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<b:ResultStatus>SUCCESS</b:ResultStatus>
<b:ResultMessage>Operation finalized successfully</b:ResultMessage>
<b:ResultData i:type="c:string" xmlns:c="http://www.w3.org/2001/XMLSchema">JCtCs3wdvCl1Ql0tstzkMczNmNxcnaLNospXPB/miOi++fbG+jP6dTRvBwhJ4triE8TXxXMs5aVyCkl0oj+WumoO2zRGZSSk1mcbjrYuKP8m+gj5yp0bOGGPbvAIaphhqV87oU+2kcyCtNt32E0QQGRGW6kr+ADPctOFOD5loV84hRUqAw8AJQX20XjlKtzkhaDGBQFMGVUODAId/ywpxCYIQOetRXWcLfCNHQE/C4+jaNwamvPTGlVhn0Vr6xWAoN0/BKBk5eDVOynX7J2zl7TErkVrZ4WA2cIbxxuq2vj1MUMV89dDB54E4cc7UduYKzMIj0iEJ+19NL47NM96iQ==</b:ResultData>
</Result>
</SignHashResponse>
</s:Body>
</s:Envelope>

Los parámetros de entrada del método son:

ParámetrosDescripción
toSignHashHash binario codificado en base64.
thumbprintHuella digital del certificado.
certificatePinPIN del certificado (Opcional).
algorithmAlgoritmo de hash, valores aceptados son RSA_SHA1, RSA_SHA256, RSA_SHA512.

Como respuesta obtienes un objeto Result con los siguientes campos:

CampoDescripción
ResultStatusCódigo de resultado, SUCCESS si la firma se ha podido realizar.
ResultMessageMensaje descriptivo del resultado de la operación.
ResultDataContiene el resultado de la operación es caso de haberse realizado la firma satisfactoriamente (Opcional).

En el Apéndice 3 Códigos de respuesta Result de este mismo documento se pueden consultar los posibles códigos de error que puedes obtener en la respuesta.

Firma DSS

Descripción de los campos de un SignRequest.
<soap:Header> 
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:UsernameToken wsu:Id="0001">
<wsse:Username>developer@local.users</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">1234</wsse:Password>
<wsu:Created>2024-11-15T11:28:30.080Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
<wsa:Action>urn:evolium:redtrust:dss:ws/RTDSSService/SignRequest</wsa:Action>
<wsa:To>https://127.0.0.1:8080/RTDSSService.svc/basic</wsa:To>
</soap:Header>
CampoDescripción
Campos de la cabecera
username@domainCorresponde con el usuario de Redtrust que va a realizar la petición de firma.
passwordContraseña del usuario.
Campos del cuerpo
firma_pdfCorresponde con el perfil de firma creado previamente en Redtrust y que define como debe realizarse la firma.
es-ESes el idioma seleccionado para los mensajes de respuesta. Si no se especifica se aplica por defecto el idioma configurado Redtrust.
403C7691336CDB7E04F9F272A602A4B42CBE298DIdentificador del certificado que se va a usar para firmar el documento y corresponde con el campo Huella Digital (thumbprint) del mismo. El certificado debe estar dado de alta en la plataforma. Únicamente si el usuario tiene acceso al certificado mediante una política de Redtrust que le permita su uso en el servicio de firma o se trata de un certificado personal este se podrá usar.
1234PIN del certificado, solamente en caso de ser necesario.
urn:oasis:names:tc:dss:1.0:profiles:PAdES:forms:LTVForma que que quieres que tenga la firma. Debe ser un valor válido por el profile y en caso de no especificarse debe de estar forzado en el perfil.
JVBERi0xLjQNJe...Nw0lJUVPRg0=Documento que va a ser firmado codificado en Base64.

XAdES

XAdES (XML Advanced Electronic Signature) son un conjunto de extensiones del XmlDSig que lo hacen adecuado para la firma electrónica, según la directiva 1999/93/EC de la Unión Europea. Uno de los puntos fuertes de XAdES es que los documentos firmados electrónicamente mediante este sistema pueden seguir siendo válidos durante largos periodos de tiempo.

A continuación se mostrarán ejemplos del uso de servicio DSS de Redtrust para firmar documentos XML mediante XAdES.

Firma XAdES BES Enveloped

Este ejemplo describe cómo hacer una llamada al servicio para generar una firma XAdES en nivel BES y con modo enveloped. El nivel BES es el más básico de la firma avanzada, tal como se describe en la sección Niveles soportados. El modo enveloped incrusta la firma dentro del documento original, tal como se describe en la sección Modos soportados.

Requisitos

  • Debe existir un perfil de firma en Redtrust definido para XAdES. El nombre debe ser XAdES, con el nivel BES seleccionado (forzado o no), modo enveloped seleccionado (forzado o no), el algoritmo de firma dependerá del certificado, normalmente RSA, y el algoritmo de digest SHA256.
  • Debe existir un certificado con el identificador de la petición.
  • Debe existir un usuario username@domain.
  • Debe existir una política de uso que permita al usuario hacer uso del certificado para la firma de documentos o utilizar un certificado personal del usuario.
Petición
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:urn="urn:oasis:names:tc:dss:1.0:core:schema" xmlns:xd="http://www.w3.org/2000/09/xmldsig#">
<soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:UsernameToken wsu:Id="0001">
<wsse:Username>[USERNAME]</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">[PASSWORD]</wsse:Password>
<wsu:Created>2024-11-15T12:14:44.617Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
<wsa:Action>urn:evolium:redtrust:dss:ws/RTDSSService/SignRequest</wsa:Action>
<wsa:To>https://[IP_REDTRUST]:8080/RTDSSService.svc/basic</wsa:To>
</soap:Header>
<soap:Body>
<SignRequest Profile="XAdES-BES-Enveloped-RSA-SHA256" RequestID="dss-sign-request-1" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<OptionalInputs>
<dss:Language xmlns:dss="urn:oasis:names:tc:dss:1.0:core:schema">en-US</dss:Language>
<KeySelector>
<KeyInfo Id="Thumbprint" xmlns="http://www.w3.org/2000/09/xmldsig#">403C7691336CDB7E04F9F272A602A4B42CBE298D</KeyInfo>
</KeySelector>
<SignatureForm xmlns="urn:evolium:redtrust:dss:1.0:core:schema">urn:oasis:names:tc:dss:1.0:profiles:XAdES:forms:BES</SignatureForm>
<SignaturePlacement WhichDocument="ID-document-1"/>
</OptionalInputs>
<InputDocuments>
<Document ID="ID-document-1">
<Base64XML>PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPG1lc3NhZ2U+CiAgICA8dGV4
dD5IZWxsbyBXb3JsZDwvdGV4dD4KPC9tZXNzYWdlPgo=</Base64XML>
</Document>
</InputDocuments>
</SignRequest>
</soap:Body>
</soap:Envelope>

En la petición puedes ver la autenticación del usuario en la cabecera SOAP y el perfil de firma seleccionado en el atributo Profile del tag SignRequest que hace referencia al perfil definido en Redtrust. Puedes ver también el KeyInfo con el thumbprint certificado con el que se va a firmar, el tag SignatureForm que especifica que el nivel será BES, el tag SignaturePlacement que especifica el modo enveloped y el documento XML que se va a firmar codificado en Base64 dentro del tag Base64XML.

Respuesta
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">urn:evolium:redtrust:dss:ws/RTDSSService/SignRequestResponse</a:Action>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SignResponse RequestID="dss-sign-request-1" Profile="XAdES-BES-Enveloped-RSA-SHA256" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<Result>
<ResultMajor>urn:oasis:names:tc:dss:1.0:resultmajor:Success</ResultMajor>
</Result>
<OptionalOutputs>
<dss:DocumentWithSignature xmlns:dss="urn:oasis:names:tc:dss:1.0:core:schema" xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:rt="urn:evolium:redtrust:dss:1.0:core:schema" xmlns:xades="http://uri.etsi.org/01903/v1.3.2#">
<dss:Document ID="ID-document-1">
<dss:Base64XML>...</dss:Base64XML>
</dss:Document>
</dss:DocumentWithSignature>
</OptionalOutputs>
<SignatureObject>
<SignaturePtr WhichDocument="ID-document-1"/>
</SignatureObject>
</SignResponse>
</s:Body>
</s:Envelope>

La respuesta muestra el estado general de la petición en el tag ResultMajor, un tag SignaturePtr que es una referencia a donde se encuentra el documento dentro de la respuesta y por último el tag Base64XML que contiene el documento con la firma incrustada codificado en Base64.

Firma XAdES BES Enveloping

Este ejemplo describe cómo hacer una llamada al servicio para generar una firma XAdES en nivel BES y con modo enveloping. El nivel BES es el más básico de la firma avanzada, tal como se describe en la sección Niveles soportados. El modo enveloping incrusta el documento original dentro de la firma, tal como se describe en la sección Modos soportados.

Requisitos

  • Debe existir un perfil de firma en Redtrust definido para XAdES. El nombre debe ser XAdES, con el nivel BES seleccionado (forzado o no), modo enveloping seleccionado (forzado o no), algoritmo de firma dependerá del certificado, normalmente RSA y algoritmo de digest SHA256.
  • Debe existir un certificado con el identificador de la petición.
  • Debe existir un usuario username@domain.
  • Debe existir una política de uso que permita al usuario hacer uso del certificado para la firma de documentos o utilizar un certificado personal del usuario.
Petición
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:urn="urn:oasis:names:tc:dss:1.0:core:schema" xmlns:xd="http://www.w3.org/2000/09/xmldsig#">
<soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:UsernameToken wsu:Id="0001">
<wsse:Username>[USERNAME]</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">[PASSWORD]</wsse:Password>
<wsu:Created>2024-11-15T12:14:44.617Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
<wsa:Action>urn:evolium:redtrust:dss:ws/RTDSSService/SignRequest</wsa:Action>
<wsa:To>https://[IP_REDTRUST]:8080/RTDSSService.svc/basic</wsa:To>
</soap:Header>
<soap:Body>
<SignRequest Profile="XAdES enveloping" RequestID="dss-sign-request-1" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<OptionalInputs>
<dss:Language xmlns:dss="urn:oasis:names:tc:dss:1.0:core:schema">en-US</dss:Language>
<KeySelector>
<KeyInfo Id="Thumbprint" xmlns="http://www.w3.org/2000/09/xmldsig#">403C7691336CDB7E04F9F272A602A4B42CBE298D</KeyInfo>
</KeySelector>
<SignatureForm xmlns="urn:evolium:redtrust:dss:1.0:core:schema">urn:oasis:names:tc:dss:1.0:profiles:XAdES:forms:BES</SignatureForm>
<IncludeObject WhichDocument="ID-document-1"/>
</OptionalInputs>
<InputDocuments>
<Document ID="ID-document-1">
<InlineXML>
<Document>
<Chapter>Text</Chapter>
</Document>
</InlineXML>
</Document>
</InputDocuments>
</SignRequest>
</soap:Body>
</soap:Envelope>

La petición muestra la autenticación del usuario en la cabecera SOAP y el perfil de firma seleccionado en el atributo Profile del tag SignRequest que hace referencia al perfil definido en Redtrust. Puedes ver también el KeyInfo con el thumbprint certificado con el que se va a firmar, el tag SignatureForm que especifica que el nivel será BES, el tag SignaturePlacement especifica el modo enveloping y el documento XML que se va a firmar directamente incrustado dentro del tag InlineXML.

Respuesta
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">urn:evolium:redtrust:dss:ws/RTDSSService/SignRequestResponse</a:Action>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SignResponse RequestID="dss-sign-request-1" Profile="XAdES enveloping" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<Result>
<ResultMajor>urn:oasis:names:tc:dss:1.0:resultmajor:Success</ResultMajor>
</Result>
<SignatureObject>
<Base64Signature Type="urn:ietf:rfc:3275">...</Base64Signature>
</SignatureObject>
</SignResponse>
</s:Body>
</s:Envelope>

La respuesta muestra el estado general de la petición en el tag ResultMajor y un tag Base64Signature que contiene la firma con el documento incrustado codificado en Base64.

Firma XAdES BES Detached

Este ejemplo describe cómo hacer una llamada al servicio para generar una firma XAdES en nivel BES y con modo detached. El nivel BES es el más básico de la firma avanzada, tal como se describe en la sección Niveles soportados. El modo detached genera una firma separada del documento original, tal como se describe en la sección Modos soportados.

Requisitos

  • Debe existir un perfil de firma en Redtrust definido para XAdES. El nombre debe ser XAdES, con el nivel BES seleccionado (forzado o no), modo detached seleccionado (forzado o no), algoritmo de firma dependerá del certificado, normalmente RSA y algoritmo de digest SHA256.
  • Debe existir un certificado con el identificador de la petición.
  • Debe existir un usuario username@domain.
  • Debe existir una política de uso que permita al usuario hacer uso del certificado para la firma de documentos o utilizar un certificado personal del usuario.
Petición
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:urn="urn:oasis:names:tc:dss:1.0:core:schema" xmlns:xd="http://www.w3.org/2000/09/xmldsig#">
<soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:UsernameToken wsu:Id="0001">
<wsse:Username>[USERNAME]</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">[PASSWORD]</wsse:Password>
<wsu:Created>2024-11-15T12:14:44.617Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
<wsa:Action>urn:evolium:redtrust:dss:ws/RTDSSService/SignRequest</wsa:Action>
<wsa:To>https://[IP_REDTRUST]:8080/RTDSSService.svc/basic</wsa:To>
</soap:Header>
<soap:Body>
<SignRequest Profile="XAdES-BES-Detached" RequestID="dss-sign-request-1" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<OptionalInputs>
<dss:Language xmlns:dss="urn:oasis:names:tc:dss:1.0:core:schema">en-US</dss:Language>
<KeySelector>
<KeyInfo Id="Thumbprint" xmlns="http://www.w3.org/2000/09/xmldsig#">403C7691336CDB7E04F9F272A602A4B42CBE298D</KeyInfo>
</KeySelector>
<SignatureForm xmlns="urn:evolium:redtrust:dss:1.0:core:schema">urn:oasis:names:tc:dss:1.0:profiles:XAdES:forms:BES</SignatureForm>
</OptionalInputs>
<InputDocuments>
<Document ID="ID-document-1">
<EscapedXML>&lt;Document>&lt;Chapter>Text&lt;/Chapter>&lt;/Document></EscapedXML>
</Document>
</InputDocuments>
</SignRequest>
</soap:Body>
</soap:Envelope>

La petición muestra la autenticación del usuario en la cabecera SOAP y el perfil de firma seleccionado en el atributo Profile del tag SignRequest que hace referencia al perfil definido en Redtrust. Puedes ver también el KeyInfo con el thumbprint certificado con el que se va a firmar, el tag SignatureForm que especifica que el nivel es BES y el documento XML que se va a firmar escapado incrustado dentro del tag EscapedXML. La ausencia del tag SignaturePlacement especifica que el modo es el forzado en el perfil de firma o si no está forzado el modo es detached.

Respuesta
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">urn:evolium:redtrust:dss:ws/RTDSSService/SignRequestResponse</a:Action>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SignResponse RequestID="dss-sign-request-1" Profile="XAdES-BES-Detached" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<Result>
<ResultMajor>urn:oasis:names:tc:dss:1.0:resultmajor:Success</ResultMajor>
</Result>
<SignatureObject>
<Base64Signature Type="urn:ietf:rfc:3275">...</Base64Signature>
</SignatureObject>
</SignResponse>
</s:Body>
</s:Envelope>

La respuesta muestra el estado general de la petición en el tag ResultMajor y un tag Base64Signature que contiene la firma codificada en Base64.

Firma XAdES T Enveloped

Este ejemplo describe cómo hacer una llamada al servicio para generar una firma XAdES en nivel T y con modo enveloped. El nivel T añade un sello de tiempo a la firma, tal como se describe en la sección Niveles soportados. El modo enveloped incrusta la firma dentro del documento original, tal como se describe en la sección Modos soportados.

Requisitos

  • Debe existir un perfil de firma en Redtrust definido para XAdES. El nombre debe ser XAdES, con el nivel T seleccionado (forzado o no), modo enveloped seleccionado (forzado o no), algoritmo de firma dependerá del certificado, normalmente RSA, y algoritmo de digest SHA256, y por lo menos un TSP válido seleccionado como primario o secundario.
  • Debe existir un certificado con el identificador de la petición, protegido por PIN.
  • Debe existir un usuario username@domain.
  • Debe existir una política de uso que permita al usuario hacer uso del certificado para la firma de documentos o utilizar un certificado personal del usuario.
Petición
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:urn="urn:oasis:names:tc:dss:1.0:core:schema" xmlns:xd="http://www.w3.org/2000/09/xmldsig#">
<soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:UsernameToken wsu:Id="0001">
<wsse:Username>[USERNAME]</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">[PASSWORD]</wsse:Password>
<wsu:Created>2024-11-15T12:14:44.617Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
<wsa:Action>urn:evolium:redtrust:dss:ws/RTDSSService/SignRequest</wsa:Action>
<wsa:To>https://[IP_REDTRUST]:8080/RTDSSService.svc/basic</wsa:To>
</soap:Header>
<soap:Body>
<SignRequest Profile="XAdES-T-Forced-Enveloped-Forced-RSA-SHA256" RequestID="dss-sign-request-1" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<OptionalInputs>
<dss:Language xmlns:dss="urn:oasis:names:tc:dss:1.0:core:schema">en-US</dss:Language>
<KeySelector>
<KeyInfo Id="Thumbprint" xmlns="http://www.w3.org/2000/09/xmldsig#">403C7691336CDB7E04F9F272A602A4B42CBE298D</KeyInfo>
</KeySelector>
<AdditionalKeyInfo>
<KeyInfo Id="Pin" xmlns="http://www.w3.org/2000/09/xmldsig#">1234</KeyInfo>
</AdditionalKeyInfo>
<SignatureForm xmlns="urn:evolium:redtrust:dss:1.0:core:schema">urn:oasis:names:tc:dss:1.0:profiles:XAdES:forms:ES-T</SignatureForm>
<SignaturePlacement WhichDocument="ID-document-1"/>
</OptionalInputs>
<InputDocuments>
<Document ID="ID-document-1">
<Base64XML>PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPG1lc3NhZ2U+CiAgICA8dGV4dD5IZWxsbyBXb3JsZDwvdGV4dD4KPC9tZXNzYWdlPgo=</Base64XML>
</Document>
</InputDocuments>
</SignRequest>
</soap:Body>
</soap:Envelope>

La petición muestra la autenticación del usuario en la cabecera SOAP y el perfil de firma seleccionado en el atributo Profile del tag SignRequest que hace referencia al perfil definido en Redtrust. Puedes ver también el KeyInfo con el thumbprint certificado con el que se va a firmar y en el tag AdditionalKeyInfo la información del PIN del certificado, el tag SignatureForm que especifica que el nivel será BES, el tag SignaturePlacement que especifica el modo enveloped y el documento XML que se va a firmar codificado en Base64 dentro del tag Base64XML.

Details

Respuesta:

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">urn:evolium:redtrust:dss:ws/RTDSSService/SignRequestResponse</a:Action>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SignResponse RequestID="dss-sign-request-1" Profile="XAdES-T-Forced-Enveloped-Forced-RSA-SHA256" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<Result>
<ResultMajor>urn:oasis:names:tc:dss:1.0:resultmajor:Success</ResultMajor>
</Result>
<OptionalOutputs>
<dss:DocumentWithSignature xmlns:dss="urn:oasis:names:tc:dss:1.0:core:schema" xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:rt="urn:evolium:redtrust:dss:1.0:core:schema" xmlns:xades="http://uri.etsi.org/01903/v1.3.2#">
<dss:Document ID="ID-document-1">
<dss:Base64XML>...</dss:Base64XML>
</dss:Document>
</dss:DocumentWithSignature>
</OptionalOutputs>
<SignatureObject>
<SignaturePtr WhichDocument="ID-document-1"/>
</SignatureObject>
</SignResponse>
</s:Body>
</s:Envelope>

La respuesta muestra el estado general de la petición en el tag ResultMajor, un tag SignaturePtr que es una referencia a donde se encuentra el documento dentro de la respuesta y por último el tag Base64XML que contiene el documento con la firma incrustada codificado en Base64. La firma contendrá un sello de tiempo, que protege la firma contra repudio.

Firma FacturaE 3.0 (XAdES EPES Enveloped)

Este ejemplo describe cómo hacer una llamada al servicio para generar una firma XAdES en nivel EPES (con una política de firma), con modo enveloped. El nivel EPES es igual que el nivel BES únicamente que se ha definido una política de firma, tal como se describe en la sección Niveles soportados. El modo enveloped incrusta la firma dentro del documento original, tal como se describe en la sección Modos soportados.

Requisitos

  • Debe existir un perfil de firma en Redtrust definido para XAdES. El nombre debe ser FacturaE_3.0, con el nivel BES o EPES seleccionado forzado, modo enveloped seleccionado forzado, algoritmo de firma dependerá del certificado, normalmente RSA, y algoritmo de digest SHA256. En Políticas debe incluir la siguiente información:
    • OID: http://www.facturae.es/ politica de firma formato facturae/politica de firma formato facturae v3_0.pdf
    • Hash: HQvPemjDslVpcNmaJPpbHzhdZ50=
    • Hash algorithm: sha1
  • Debe existir un certificado con el identificador de la petición.
  • Debe existir un usuario username@domain.
  • Debe existir una política de uso que permita al usuario hacer uso del certificado para la firma de documentos o utilizar un certificado personal del usuario.

El documento a firmar debe ser un XML válido según el esquema de facturae 3.0 definido en la URL http://www.facturae.gob.es/formato/Versiones%20anteriores/B)%20Versi%C3%B3n%203.0/Facturae30.xml.

Petición
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:urn="urn:oasis:names:tc:dss:1.0:core:schema" xmlns:xd="http://www.w3.org/2000/09/xmldsig#">
<soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:UsernameToken wsu:Id="0001">
<wsse:Username>[USERNAME]</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">[PASSWORD]</wsse:Password>
<wsu:Created>2024-11-15T12:14:44.617Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
<wsa:Action>urn:evolium:redtrust:dss:ws/RTDSSService/SignRequest</wsa:Action>
<wsa:To>https://[IP_REDTRUST]:8080/RTDSSService.svc/basic</wsa:To>
</soap:Header>
<soap:Body>
<SignRequest Profile="XAdES-Facturae_3.0-EPES_Forced-Enveloped-RSA-SHA256" RequestID="dss-sign-request-1" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<OptionalInputs>
<dss:Language xmlns:dss="urn:oasis:names:tc:dss:1.0:core:schema">en-US</dss:Language>
<KeySelector>
<KeyInfo Id="Thumbprint" xmlns="http://www.w3.org/2000/09/xmldsig#">403C7691336CDB7E04F9F272A602A4B42CBE298D</KeyInfo>
</KeySelector>
<SignatureForm xmlns="urn:evolium:redtrust:dss:1.0:core:schema">urn:oasis:names:tc:dss:1.0:profiles:XAdES:forms:EPES</SignatureForm>
</OptionalInputs>
<InputDocuments>
<Document ID="ID-document-1">
<Base64XML>...</Base64XML>
</Document>
</InputDocuments>
</SignRequest>
</soap:Body>
</soap:Envelope>

La petición muestra la autenticación del usuario en la cabecera SOAP y el perfil de firma seleccionado en el atributo Profile del tag SignRequest que hace referencia al perfil definido en Redtrust. Puedes ver también el KeyInfo con el thumbprint certificado con el que se va a firmar y el documento XML que se va a firmar codificado en Base64 dentro del tag Base64XML. Al estar forzados en perfil tanto el modo como el nivel no hace falta especificar nada en la petición al respecto.

Respuesta
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">urn:evolium:redtrust:dss:ws/RTDSSService/SignRequestResponse</a:Action>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SignResponse RequestID="dss-sign-request-1" Profile="XAdES-Facturae_3.0-EPES_Forced-Enveloped-RSA-SHA256" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<Result>
<ResultMajor>urn:oasis:names:tc:dss:1.0:resultmajor:Success</ResultMajor>
</Result>
<SignatureObject>
<Base64Signature Type="urn:ietf:rfc:3275">...</Base64Signature>
</SignatureObject>
</SignResponse>
</s:Body>
</s:Envelope>

La respuesta muestra el estado general de la petición en el tag ResultMajor, un tag SignaturePtr que es una referencia a donde se encuentra el documento dentro de la respuesta y por último el tag Base64XML que contiene el documento con la firma incrustada codificado en Base64. Al incluir la política de firma en el perfil, la firma contendrá esa información y será válida como factura electrónica 3.0, siempre que el documento de entrada sea válido conforme el esquema. Redtrust no hace validaciones de formato del XML, es responsabilidad del peticionario el validar el formato, si lo cree necesario, antes de enviar la petición al servicio.

Firma FacturaE 3.2 (XAdES EPES Enveloped)

Este ejemplo describe cómo hacer una llamada al servicio para generar una firma XAdES en nivel EPES (con una política de firma), con modo enveloped. El nivel EPES es igual que el nivel BES únicamente que se ha definido una política de firma, tal como se describe en la sección Niveles soportados. El modo enveloped incrusta la firma dentro del documento original, tal como se describe en la sección Modos soportados.

Requisitos

  • Debe existir un perfil de firma en Redtrust definido para XAdES. El nombre debe ser FacturaE_3.1_3.2, con el nivel BES o EPES seleccionado (forzado o no), modo enveloped seleccionado (forzado o no), algoritmo de firma dependerá del certificado, normalmente RSA, y algoritmo de digest SHA256. En Políticas debe incluir la siguiente información:
  • Debe existir un certificado con el identificador de la petición.
  • Debe existir un usuario username@domain.
  • Debe existir una política de uso que permita al usuario hacer uso del certificado para la firma de documentos o utilizar un certificado personal del usuario.

El documento a firmar debe ser un XML válido según el esquema de facturae 3.0 definido en la URL http://www.facturae.gob.es/formato/Versiones/Facturaev3_2.xml

Petición
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:urn="urn:oasis:names:tc:dss:1.0:core:schema" xmlns:xd="http://www.w3.org/2000/09/xmldsig#">
<soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:UsernameToken wsu:Id="0001">
<wsse:Username>[USERNAME]</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">[PASSWORD]</wsse:Password>
<wsu:Created>2024-11-15T12:14:44.617Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
<wsa:Action>urn:evolium:redtrust:dss:ws/RTDSSService/SignRequest</wsa:Action>
<wsa:To>https://[IP_REDTRUST]:8080/RTDSSService.svc/basic</wsa:To>
</soap:Header>
<soap:Body>
<SignRequest Profile="XAdES-Facturae_3.1_3.2-EPES-Forced-Enveloped-Forced-RSA-SHA2" RequestID="dss-sign-request-1" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<OptionalInputs>
<dss:Language xmlns:dss="urn:oasis:names:tc:dss:1.0:core:schema">en-US</dss:Language>
<KeySelector>
<KeyInfo Id="Thumbprint" xmlns="http://www.w3.org/2000/09/xmldsig#">403C7691336CDB7E04F9F272A602A4B42CBE298D</KeyInfo>
</KeySelector>
<SignaturePlacement WhichDocument="ID-document-1"/>
</OptionalInputs>
<InputDocuments>
<Document ID="ID-document-1">
<Base64XML>...</Base64XML>
</Document>
</InputDocuments>
</SignRequest>
</soap:Body>
</soap:Envelope>

La petición muestra la autenticación del usuario en la cabecera SOAP y el perfil de firma seleccionado en el atributo Profile del tag SignRequest que hace referencia al perfil definido en Redtrust. Puedes ver también el KeyInfo con el thumbprint certificado con el que se va a firmar y el documento XML que se va a firmar codificado en Base64 dentro del tag Base64XML. Al estar forzados en perfil tanto el modo como el nivel no hace falta especificar nada en la petición al respecto.

Respuesta
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">urn:evolium:redtrust:dss:ws/RTDSSService/SignRequestResponse</a:Action>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SignResponse RequestID="dss-sign-request-1" Profile="XAdES-Facturae_3.1_3.2-EPES-Forced-Enveloped-Forced-RSA-SHA2" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<Result>
<ResultMajor>urn:oasis:names:tc:dss:1.0:resultmajor:Success</ResultMajor>
</Result>
<OptionalOutputs>
<dss:DocumentWithSignature xmlns:dss="urn:oasis:names:tc:dss:1.0:core:schema" xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:rt="urn:evolium:redtrust:dss:1.0:core:schema" xmlns:xades="http://uri.etsi.org/01903/v1.3.2#">
<dss:Document ID="ID-document-1">
<dss:Base64XML>...</dss:Base64XML>
</dss:Document>
</dss:DocumentWithSignature>
</OptionalOutputs>
<SignatureObject>
<SignaturePtr WhichDocument="ID-document-1"/>
</SignatureObject>
</SignResponse>
</s:Body>
</s:Envelope>

La respuesta muestra el estado general de la petición en el tag ResultMajor, un tag SignaturePtr que es una referencia a donde se encuentra el documento dentro de la respuesta y por último el tag Base64XML que contiene el documento con la firma incrustada codificado en Base64. Al incluir la política de firma en el perfil, la firma contendrá esa información y será válida como factura electrónica 3.2, siempre que el documento de entrada sea válido conforme el esquema. Redtrust no hace validaciones de formato del XML, es responsabilidad del peticionario el validar el formato, si lo cree necesario, antes de enviar la petición al servicio.

CAdES (CMS Advanced Electronic Signature)

CAdES (CMS Advanced Electronic Signature) son un conjunto de extensiones del CMS que lo hacen adecuado para la firma electrónica, según la directiva 1999/93/EC de la Unión Europea. Al igual que XAdES, uno de los puntos fuertes de CAdES es que los documentos firmados electrónicamente mediante este pueden seguir siendo válidos durante largos periodos de tiempo.

A continuación se muestran unos cuantos ejemplos del uso de servicio DSS de Redtrust para firmar documentos mediante CAdES.

Firma CAdES BES Enveloping

Este ejemplo describe cómo hacer una llamada al servicio para generar una firma CAdES en nivel BES y con modo enveloping. El nivel BES es el más básico de la firma avanzada, tal como se describe en la sección Niveles soportados. El modo enveloping incrusta el documento original dentro de la firma, tal como se describe en la sección Modos soportados.

Requisitos

  • Debe existir un perfil de firma en Redtrust definido para CAdES. El nombre debe ser CAdES, con el nivel BES seleccionado (forzado o no), modo enveloping seleccionado (forzado o no), algoritmo de firma dependerá del certificado, normalmente RSA, y algoritmo de digest SHA256.
  • Debe existir un certificado con el identificador de la petición.
  • Debe existir un usuario username@domain.
  • Debe existir una política de uso que permita al usuario hacer uso del certificado para la firma de documentos o utilizar un certificado personal del usuario.
Details

Petición:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:urn="urn:oasis:names:tc:dss:1.0:core:schema" xmlns:xd="http://www.w3.org/2000/09/xmldsig#">
<soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:UsernameToken wsu:Id="0001">
<wsse:Username>[USERNAME]</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">[PASSWORD]</wsse:Password>
<wsu:Created>2024-11-15T12:14:44.617Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
<wsa:Action>urn:evolium:redtrust:dss:ws/RTDSSService/SignRequest</wsa:Action>
<wsa:To>https://[IP_REDTRUST]:8080/RTDSSService.svc/basic</wsa:To>
</soap:Header>
<soap:Body>
<SignRequest Profile="CAdES-BES-Enveloping" RequestID="dss-sign-request-1" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<OptionalInputs>
<dss:Language xmlns:dss="urn:oasis:names:tc:dss:1.0:core:schema">en-US</dss:Language>
<KeySelector>
<KeyInfo Id="Thumbprint" xmlns="http://www.w3.org/2000/09/xmldsig#">403C7691336CDB7E04F9F272A602A4B42CBE298D</KeyInfo>
</KeySelector>
<IncludeEContent/>
<SignatureForm xmlns="urn:evolium:redtrust:dss:1.0:core:schema">urn:oasis:names:tc:dss:1.0:profiles:XAdES:forms:BES</SignatureForm>
</OptionalInputs>
<InputDocuments>
<Document ID="ID-document-1">
<Base64Data MimeType="text/plain">RmljaGVybyBkZSBwcnVlYmEgYSBmaXJtYXI=</Base64Data>
</Document>
</InputDocuments>
</SignRequest>
</soap:Body>
</soap:Envelope>

La petición muestra la autenticación del usuario en la cabecera SOAP y el perfil de firma seleccionado en el atributo Profile del tag SignRequest que hace referencia al perfil definido en Redtrust. Puedes ver también el KeyInfo con el thumbprint certificado con el que se va a firmar, el tag SignatureForm que especifica que el nivel será BES, el tag IncludeEContent especifica que el modo ha de ser enveloping y el documento XML que se va a firmar codificado en Base64 dentro del tag Base64Data.

Respuesta
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">urn:evolium:redtrust:dss:ws/RTDSSService/SignRequestResponse</a:Action>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SignResponse RequestID="dss-sign-request-1" Profile="CAdES-BES-Enveloping" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<Result>
<ResultMajor>urn:oasis:names:tc:dss:1.0:resultmajor:Success</ResultMajor>
</Result>
<SignatureObject>
<Base64Signature Type="urn:ietf:rfc:3369">...</Base64Signature>
</SignatureObject>
</SignResponse>
</s:Body>
</s:Envelope>

La respuesta muestra el estado general de la petición en el tag ResultMajor, un tag Base64Signature que contiene la firma con el documento con incrustado codificado en Base64.

Firma CAdES BES Detached

Este ejemplo describe cómo hacer una llamada al servicio para generar una firma CAdES en nivel BES y con modo detached. El nivel BES es el más básico de la firma avanzada, tal como se describe en la sección Niveles soportados. El modo detached genera una firma separada del documento, tal como se describe en la sección Modos soportados.

Requisitos

  • Debe existir un perfil de firma en Redtrust definido para CAdES. El nombre debe ser CAdES, con el nivel BES seleccionado (forzado o no), modo detached seleccionado (forzado o no), algoritmo de firma dependerá del certificado, normalmente RSA, y algoritmo de digest SHA256.
  • Debe existir un certificado con el identificador de la petición.
  • Debe existir un usuario username@domain.
  • Debe existir una política de uso que permita al usuario hacer uso del certificado para la firma de documentos o utilizar un certificado personal del usuario.
Petición
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:urn="urn:oasis:names:tc:dss:1.0:core:schema" xmlns:xd="http://www.w3.org/2000/09/xmldsig#">
<soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:UsernameToken wsu:Id="0001">
<wsse:Username>[USERNAME]</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">[PASSWORD]</wsse:Password>
<wsu:Created>2024-11-15T12:14:44.617Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
<wsa:Action>urn:evolium:redtrust:dss:ws/RTDSSService/SignRequest</wsa:Action>
<wsa:To>https://[IP_REDTRUST]:8080/RTDSSService.svc/basic</wsa:To>
</soap:Header>
<soap:Body>
<SignRequest Profile="CAdES-BES-Detached" RequestID="dss-sign-request-1" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<OptionalInputs>
<dss:Language xmlns:dss="urn:oasis:names:tc:dss:1.0:core:schema">en-US</dss:Language>
<KeySelector>
<KeyInfo Id="Thumbprint" xmlns="http://www.w3.org/2000/09/xmldsig#">403C7691336CDB7E04F9F272A602A4B42CBE298D</KeyInfo>
</KeySelector>
<SignatureForm xmlns="urn:evolium:redtrust:dss:1.0:core:schema">urn:oasis:names:tc:dss:1.0:profiles:XAdES:forms:BES</SignatureForm>
</OptionalInputs>
<InputDocuments>
<Document ID="ID-document-1">
<Base64Data MimeType="text/plain">RmljaGVybyBkZSBwcnVlYmEgYSBmaXJtYXI=</Base64Data>
</Document>
</InputDocuments>
</SignRequest>
</soap:Body>
</soap:Envelope>

La petición muestra la autenticación del usuario en la cabecera SOAP y el perfil de firma seleccionado en el atributo Profile del tag SignRequest que hace referencia al perfil definido en Redtrust. Puedes ver también el KeyInfo con el thumbprint certificado con el que se va a firmar, el tag SignatureForm que especifica que el nivel será BES y el documento XML que se va a firmar codificado en Base64 dentro del tag Base64Data. La ausencia del tag IncludeEContent específica que se use el modo forzado en el perfil o si no está forzado el modo detached.

Respuesta
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">urn:evolium:redtrust:dss:ws/RTDSSService/SignRequestResponse</a:Action>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SignResponse RequestID="dss-sign-request-1" Profile="CAdES-BES-Detached" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<Result>
<ResultMajor>urn:oasis:names:tc:dss:1.0:resultmajor:Success</ResultMajor>
</Result>
<SignatureObject>
<Base64Signature Type="urn:ietf:rfc:3369">...</Base64Signature>
</SignatureObject>
</SignResponse>
</s:Body>
</s:Envelope>

La respuesta muestra el estado general de la petición en el tag ResultMajor, un tag Base64Signature que contiene la firma codificada en Base64.

PAdES

PAdES (PDF Advanced Electronic Signature) son un conjunto de extensiones al PDF y a la ISO 32000-1 que lo hacen adecuado para la firma electrónica, según la directiva 1999/93/EC de la Unión Europea.

A continuación se mostrarán unos cuantos ejemplos del uso de servicio DSS de Redtrust para firmar documentos mediante PAdES.

Firma PDF BES

Este ejemplo describe cómo hacer una llamada al servicio para generar una firma PAdES en nivel BES. El nivel BES es el más básico de la firma avanzada, tal como se describe en la sección Niveles soportados. PAdES únicamente acepta modo enveloped tal como se describe en la sección Modos soportados.

Requisitos

  • Debe existir un perfil de firma en Redtrust definido para PAdES. El nombre debe ser PAdES, con el nivel BES seleccionado (forzado o no), modo enveloped. El algoritmo de firma dependerá del certificado, normalmente RSA, y algoritmo de digest SHA256.
  • Debe existir un certificado con el identificador de la petición.
  • Debe existir un usuario username@domain.
  • Debe existir una política de uso que permita al usuario hacer uso del certificado para la firma de documentos o utilizar un certificado personal del usuario.
Petición
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:urn="urn:oasis:names:tc:dss:1.0:core:schema" xmlns:xd="http://www.w3.org/2000/09/xmldsig#">
<soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:UsernameToken wsu:Id="0001">
<wsse:Username>[USERNAME]</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">[PASSWORD]</wsse:Password>
<wsu:Created>2024-11-15T12:14:44.617Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
<wsa:Action>urn:evolium:redtrust:dss:ws/RTDSSService/SignRequest</wsa:Action>
<wsa:To>https://[IP_REDTRUST]:8080/RTDSSService.svc/basic</wsa:To>
</soap:Header>
<soap:Body>
<SignRequest Profile="PAdES_BES" RequestID="dss-sign-request-1" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<OptionalInputs>
<Language>en-US</Language>
<KeySelector>
<KeyInfo Id="Thumbprint" xmlns="http://www.w3.org/2000/09/xmldsig#">403C7691336CDB7E04F9F272A602A4B42CBE298D</KeyInfo>
</KeySelector>
<SignatureForm xmlns="urn:evolium:redtrust:dss:1.0:core:schema">urn:oasis:names:tc:dss:1.0:profiles:XAdES:forms:BES</SignatureForm>
</OptionalInputs>
<InputDocuments>
<Document ID="ID-document-1">
<Base64Data MimeType="application/pdf">...</Base64Data>
</Document>
</InputDocuments>
</SignRequest>
</soap:Body>
</soap:Envelope>

La petición muestra la autenticación del usuario en la cabecera SOAP y el perfil de firma seleccionado en el atributo Profile del tag SignRequest que hace referencia al perfil definido en Redtrust. Puedes ver también el KeyInfo con el thumbprint certificado con el que se va a firmar, el tag SignatureForm que especifica que el nivel será BES y el documento PDF que se va a firmar codificado en Base64 dentro del tag Base64Data (el atributo MimeType="application/pdf" especifica que el contenido del tag corresponde con un PDF).

Respuesta
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">urn:evolium:redtrust:dss:ws/RTDSSService/SignRequestResponse</a:Action>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SignResponse RequestID="dss-sign-request-1" Profile="PAdES_BES" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<Result>
<ResultMajor>urn:oasis:names:tc:dss:1.0:resultmajor:Success</ResultMajor>
</Result>
<SignatureObject>
<Base64Signature Type="urn:ietf:rfc:3369">...</Base64Signature>
</SignatureObject>
</SignResponse>
</s:Body>
</s:Envelope>

La respuesta muestra el estado general de la petición en el tag ResultMajor, un tag Base64Signature que contiene el fichero PDF con la firma codificado en Base64.

Firma PDF BES Visible

Este ejemplo describe cómo hacer una llamada al servicio para generar una firma PAdES en nivel BES y con representación visual de la firma. El nivel BES es el más básico de la firma avanzada, tal como se describe en la sección Niveles soportados. PAdES únicamente acepta modo enveloped tal como se describe en la sección Modos soportados.

Requisitos

  • Debe existir un perfil de firma en Redtrust definido para PAdES. El nombre debe ser PAdES, con el nivel BES seleccionado (forzado o no), modo enveloped, algoritmo de firma dependerá del certificado, normalmente RSA, y algoritmo de digest SHA256.
  • Debe existir un certificado con el identificador de la petición.
  • Debe existir un usuario username@domain.
  • Debe existir una política de uso que permita al usuario hacer uso del certificado para la firma de documentos o utilizar un certificado personal del usuario.
Petición
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:urn="urn:oasis:names:tc:dss:1.0:core:schema" xmlns:xd="http://www.w3.org/2000/09/xmldsig#">
<soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:UsernameToken wsu:Id="0001">
<wsse:Username>[USERNAME]</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">[PASSWORD]</wsse:Password>
<wsu:Created>2024-11-15T12:14:44.617Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
<wsa:Action>urn:evolium:redtrust:dss:ws/RTDSSService/SignRequest</wsa:Action>
<wsa:To>https://[IP_REDTRUST]:8080/RTDSSService.svc/basic</wsa:To>
</soap:Header>
<soap:Body>
<SignRequest Profile="PAdES_BES" RequestID="dss-sign-request-1" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<OptionalInputs>
<q1:VisibleSignatureConfiguration xmlns:q1="urn:oasis:names:tc:dssx:1.0:profiles:VisibleSignatures:schema#">
<q1:VisibleSignaturePolicy>GeneralPolicy</q1:VisibleSignaturePolicy>
<q1:VisibleSignaturePosition d4p1:type="q1:PixelVisibleSignaturePositionType" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">
<q1:PageNumber>1</q1:PageNumber>
<q1:x>30</q1:x>
<q1:y>30</q1:y>
<q1:Width>200</q1:Width>
<q1:Height>60</q1:Height>
</q1:VisibleSignaturePosition>
<q1:VisibleSignatureItemsConfiguration>
<q1:VisibleSignatureItem>
<q1:ItemName>CustomText</q1:ItemName>
</q1:VisibleSignatureItem>
<q1:VisibleSignatureItem>
<q1:ItemName>SignatureReason</q1:ItemName>
<q1:ItemValue d4p1:type="q1:ItemValueStringType" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">
<q1:ItemValue>Razón de firma</q1:ItemValue>
</q1:ItemValue>
</q1:VisibleSignatureItem>
<q1:VisibleSignatureItem>
<q1:ItemName>SignatureProductionPlace</q1:ItemName>
<q1:ItemValue d4p1:type="q1:ItemValueStringType" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">
<q1:ItemValue>Barcelona</q1:ItemValue>
</q1:ItemValue>
</q1:VisibleSignatureItem>
<q1:VisibleSignatureItem>
<q1:ItemName>SignerContactInfo</q1:ItemName>
<q1:ItemValue d4p1:type="q1:ItemValueStringType" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">
<q1:ItemValue>Usuario de Redtrust (usuario.Redtrust@evolium.com)</q1:ItemValue>
</q1:ItemValue>
</q1:VisibleSignatureItem>
</q1:VisibleSignatureItemsConfiguration>
</q1:VisibleSignatureConfiguration>
<Language>en-US</Language>
<KeySelector>
<KeyInfo Id="Thumbprint" xmlns="http://www.w3.org/2000/09/xmldsig#">403C7691336CDB7E04F9F272A602A4B42CBE298D</KeyInfo>
</KeySelector>
<SignatureForm xmlns="urn:evolium:redtrust:dss:1.0:core:schema">urn:oasis:names:tc:dss:1.0:profiles:XAdES:forms:BES</SignatureForm>
</OptionalInputs>
<InputDocuments>
<Document ID="ID-document-1">
<Base64Data MimeType="application/pdf">...</Base64Data>
</Document>
</InputDocuments>
</SignRequest>
</soap:Body>
</soap:Envelope>

La petición muestra la autenticación del usuario en la cabecera SOAP y el perfil de firma seleccionado en el atributo Profile del tag SignRequest que hace referencia al perfil definido en Redtrust. Puedes ver también el KeyInfo con el thumbprint certificado con el que se va a firmar, el tag SignatureForm que especifica que el nivel será BES y el documento PDF que se va a firmar codificado en Base64 dentro del tag Base64Data (el atributo MimeType="application/pdf" especifica que el contenido del tag corresponde con un PDF).

La parte de representación visual de la firma se encuentra dentro del tag VisibleSignatureConfiguration y contiene:

TagDescripción
VisibleSignaturePolicyContiene el texto GeneralPolicy, que és la única política de representación visual aceptada por Redtrust.
VisibleSignaturePositionEspecifica la localización (contando desde la esquina inferior izquierda) y tamaño en píxeles de la representación visual.
VisibleSignatureItemsConfigurationContine una secuencia de elementos que indican cómo va a ser la firma visual, en este caso se añade una razón (SignatureReason), un lugar donde se firma (SignatureProductionPlace), información de contacto del firmante (SignerContactInfo) y un item CustomText que indica que la representación visual de la firma contendrá un texto descriptivo del certificado, concretamente el contenido de SubjectName.

La firma quedaría tal como se muestra en la siguiente representación:

Respuesta
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">urn:evolium:redtrust:dss:ws/RTDSSService/SignRequestResponse</a:Action>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SignResponse RequestID="dss-sign-request-1" Profile="PAdES_BES" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<Result>
<ResultMajor>urn:oasis:names:tc:dss:1.0:resultmajor:Success</ResultMajor>
</Result>
<SignatureObject>
<Base64Signature Type="urn:ietf:rfc:3369">...</Base64Signature>
</SignatureObject>
</SignResponse>
</s:Body>
</s:Envelope>

La respuesta muestra el estado general de la petición en el tag ResultMajor, un tag Base64Signature que contiene el fichero PDF con la firma codificado en Base64.

Firma PDF BES Visible con imagen de firma

Este ejemplo describe cómo hacer una llamada al servicio para generar una firma PAdES en nivel BES y con representación visual de la firma con imagen. El nivel BES es el más básico de la firma avanzada, tal como se describe en la sección Niveles soportados. PAdES únicamente acepta modo enveloped tal como se describe en la sección Modos soportados.

Requisitos

  • Debe existir un perfil de firma en Redtrust definido para PAdES. El nombre debe ser PAdES, con el nivel BES seleccionado (forzado o no), modo enveloped, algoritmo de firma dependerá del certificado, normalmente RSA, y algoritmo de digest SHA256.
  • Debe existir un certificado con el identificador de la petición.
  • Debe existir un usuario username@domain.
  • Debe existir una política de uso que permita al usuario hacer uso del certificado para la firma de documentos o utilizar un certificado personal del usuario.
Petición
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:urn="urn:oasis:names:tc:dss:1.0:core:schema" xmlns:xd="http://www.w3.org/2000/09/xmldsig#">
<soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:UsernameToken wsu:Id="0001">
<wsse:Username>[USERNAME]</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">[PASSWORD]</wsse:Password>
<wsu:Created>2024-11-15T12:14:44.617Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
<wsa:Action>urn:evolium:redtrust:dss:ws/RTDSSService/SignRequest</wsa:Action>
<wsa:To>https://[IP_REDTRUST]:8080/RTDSSService.svc/basic</wsa:To>
</soap:Header>
<soap:Body>
<SignRequest Profile="PAdES_BES" RequestID="dss-sign-request-1" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<OptionalInputs>
<q1:VisibleSignatureConfiguration xmlns:q1="urn:oasis:names:tc:dssx:1.0:profiles:VisibleSignatures:schema#">
<q1:VisibleSignaturePolicy>GeneralPolicy</q1:VisibleSignaturePolicy>
<q1:VisibleSignaturePosition d4p1:type="q1:PixelVisibleSignaturePositionType" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">
<q1:PageNumber>1</q1:PageNumber>
<q1:x>30</q1:x>
<q1:y>20</q1:y>
<q1:Width>200</q1:Width>
<q1:Height>75</q1:Height>
</q1:VisibleSignaturePosition>
<q1:VisibleSignatureItemsConfiguration>
<q1:VisibleSignatureItem>
<q1:ItemName>SignatureReason</q1:ItemName>
<q1:ItemValue d4p1:type="q1:ItemValueStringType" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">
<q1:ItemValue>Razón de firma</q1:ItemValue>
</q1:ItemValue>
</q1:VisibleSignatureItem>
<q1:VisibleSignatureItem>
<q1:ItemName>SignatureProductionPlace</q1:ItemName>
<q1:ItemValue d4p1:type="q1:ItemValueStringType" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">
<q1:ItemValue>Barcelona</q1:ItemValue>
</q1:ItemValue>
</q1:VisibleSignatureItem>
<q1:VisibleSignatureItem>
<q1:ItemName>CustomText</q1:ItemName>
</q1:VisibleSignatureItem>
<q1:VisibleSignatureItem>
<q1:ItemName>SignerContactInfo</q1:ItemName>
<q1:ItemValue d4p1:type="q1:ItemValueStringType" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">
<q1:ItemValue>Usuario Demo (user@demo.com)</q1:ItemValue>
</q1:ItemValue>
</q1:VisibleSignatureItem>
<q1:VisibleSignatureItem>
<q1:ItemName>SignerImage</q1:ItemName>
<q1:ItemValue d4p1:type="q1:ItemValueURIType" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">
<q1:ItemValue>https://upload.wikimedia.org/wikipedia/commons/thumb/a/af/Miguel_de_Cervantes_signature.svg/1280px-Miguel_de_Cervantes_signature.svg.png</q1:ItemValue>
</q1:ItemValue>
</q1:VisibleSignatureItem>
</q1:VisibleSignatureItemsConfiguration>
</q1:VisibleSignatureConfiguration>
<Language>en-US</Language>
<KeySelector>
<KeyInfo Id="Thumbprint" xmlns="http://www.w3.org/2000/09/xmldsig#">403C7691336CDB7E04F9F272A602A4B42CBE298D</KeyInfo>
</KeySelector>
<SignatureForm xmlns="urn:evolium:redtrust:dss:1.0:core:schema">urn:oasis:names:tc:dss:1.0:profiles:XAdES:forms:BES</SignatureForm>
</OptionalInputs>
<InputDocuments>
<Document ID="ID-document-1">
<Base64Data MimeType="application/pdf"><soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:urn="urn:oasis:names:tc:dss:1.0:core:schema" xmlns:xd="http://www.w3.org/2000/09/xmldsig#">
<soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:UsernameToken wsu:Id="0001">
<wsse:Username>[USERNAME]</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">[PASSWORD]</wsse:Password>
<wsu:Created>2024-11-15T12:14:44.617Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
<wsa:Action>urn:evolium:redtrust:dss:ws/RTDSSService/SignRequest</wsa:Action>
<wsa:To>https://[IP_REDTRUST]:8080/RTDSSService.svc/basic</wsa:To>
</soap:Header>
<soap:Body>
<SignRequest Profile="PAdES_BES" RequestID="dss-sign-request-1" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<OptionalInputs>
<q1:VisibleSignatureConfiguration xmlns:q1="urn:oasis:names:tc:dssx:1.0:profiles:VisibleSignatures:schema#">
<q1:VisibleSignaturePolicy>GeneralPolicy</q1:VisibleSignaturePolicy>
<q1:VisibleSignaturePosition d4p1:type="q1:PixelVisibleSignaturePositionType" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">
<q1:PageNumber>1</q1:PageNumber>
<q1:x>30</q1:x>
<q1:y>20</q1:y>
<q1:Width>200</q1:Width>
<q1:Height>75</q1:Height>
</q1:VisibleSignaturePosition>
<q1:VisibleSignatureItemsConfiguration>
<q1:VisibleSignatureItem>
<q1:ItemName>SignatureReason</q1:ItemName>
<q1:ItemValue d4p1:type="q1:ItemValueStringType" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">
<q1:ItemValue>Razón de firma</q1:ItemValue>
</q1:ItemValue>
</q1:VisibleSignatureItem>
<q1:VisibleSignatureItem>
<q1:ItemName>SignatureProductionPlace</q1:ItemName>
<q1:ItemValue d4p1:type="q1:ItemValueStringType" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">
<q1:ItemValue>Barcelona</q1:ItemValue>
</q1:ItemValue>
</q1:VisibleSignatureItem>
<q1:VisibleSignatureItem>
<q1:ItemName>CustomText</q1:ItemName>
</q1:VisibleSignatureItem>
<q1:VisibleSignatureItem>
<q1:ItemName>SignerContactInfo</q1:ItemName>
<q1:ItemValue d4p1:type="q1:ItemValueStringType" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">
<q1:ItemValue>Usuario Demo (user@demo.com)</q1:ItemValue>
</q1:ItemValue>
</q1:VisibleSignatureItem>
<q1:VisibleSignatureItem>
<q1:ItemName>SignerImage</q1:ItemName>
<q1:ItemValue d4p1:type="q1:ItemValueURIType" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">
<q1:ItemValue>https://upload.wikimedia.org/wikipedia/commons/thumb/a/af/Miguel_de_Cervantes_signature.svg/1280px-Miguel_de_Cervantes_signature.svg.png</q1:ItemValue>
</q1:ItemValue>
</q1:VisibleSignatureItem>
</q1:VisibleSignatureItemsConfiguration>
</q1:VisibleSignatureConfiguration>
<Language>en-US</Language>
<KeySelector>
<KeyInfo Id="Thumbprint" xmlns="http://www.w3.org/2000/09/xmldsig#">403C7691336CDB7E04F9F272A602A4B42CBE298D</KeyInfo>
</KeySelector>
<SignatureForm xmlns="urn:evolium:redtrust:dss:1.0:core:schema">urn:oasis:names:tc:dss:1.0:profiles:XAdES:forms:BES</SignatureForm>
</OptionalInputs>
<InputDocuments>
<Document ID="ID-document-1">
<Base64Data MimeType="application/pdf">...</Base64Data>
</Document>
</InputDocuments>
</SignRequest>
</soap:Body>
</soap:Envelope>

En la petición puedes ver la autenticación del usuario en la cabecera SOAP y el perfil de firma seleccionado en el atributo Profile del tag SignRequest que hace referencia al perfil definido en Redtrust. Puedes ver también el KeyInfo con el thumbprint certificado con el que se va a firmar, el tag SignatureForm que especifica que el nivel será BES y el documento PDF que se va a firmar codificado en Base64 dentro del tag Base64Data (el atributo MimeType="application/pdf" especifica que el contenido del tag corresponde con un PDF).

La parte de representación visual de la firma se encuentra dentro del tag VisibleSignatureConfiguration y contiene:

TagDescripción
VisibleSignaturePolicyCon el texto GeneralPolicy, que es la única política de representación visual aceptada por Redtrust.
VisibleSignaturePositionEspecifica la localización (contando desde la esquina inferior izquierda) y tamaño en píxeles de la representación visual y un tag VisibleSignatureItemsConfiguration con una secuencia de elementos que indican cómo va a ser la firma visual, en este caso se añade una razón (SignatureReason), un lugar donde se firmó (SignatureProductionPlace), una información de contacto del firmante (SignerContactInfo), un item CustomText que indica que la representación visual de la firma contendrá un texto descriptivo del certificado y un SignerImage que indica dónde está la imagen a incrustar como firma visual.

En este caso, al especificar CustomText y SignerImage el espacio dónde aparecerá la firma estará compartido entre el SubjectName del certificado y la imagen, tal como se muestra en la siguiente imagen:

Respuesta
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">urn:evolium:redtrust:dss:ws/RTDSSService/SignRequestResponse</a:Action>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SignResponse RequestID="dss-sign-request-1" Profile="PAdES_BES" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<Result>
<ResultMajor>urn:oasis:names:tc:dss:1.0:resultmajor:Success</ResultMajor>
</Result>
<SignatureObject>
<Base64Signature Type="urn:ietf:rfc:3369">...</Base64Signature>
</SignatureObject>
</SignResponse>
</s:Body>
</s:Envelope>

En la respuesta se ve el estado general de la petición en el tag ResultMajor, un tag Base64Signature que contiene el fichero PDF con la firma codificado en Base64.

Firma PDF LTV

Este ejemplo describe cómo hacer una llamada al servicio para generar una firma PAdES en nivel LTV. El nivel LTV es el formato de firma longeva, permitiendo su validación en el futuro, tal como se describe en la sección Niveles soportados. PAdES únicamente acepta modo enveloped tal como se describe en la sección Modos soportados.

Requisitos

  • Debe existir un perfil de firma en Redtrust definido para PAdES. El nombre debe ser PAdES, con el nivel LTV seleccionado (forzado o no), modo enveloped, algoritmo de firma dependerá del certificado, normalmente RSA, algoritmo de digest SHA256 y por lo menos un TSP válido seleccionado como primario o secundario.
  • Debe existir un certificado con el identificador de la petición.
  • Debe existir un usuario username@domain.
  • Debe existir una política de uso que permita al usuario hacer uso del certificado para la firma de documentos o utilizar un certificado personal del usuario.
Petición
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:urn="urn:oasis:names:tc:dss:1.0:core:schema" xmlns:xd="http://www.w3.org/2000/09/xmldsig#">
<soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:UsernameToken wsu:Id="0001">
<wsse:Username>[USERNAME]</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">[PASSWORD]</wsse:Password>
<wsu:Created>2024-11-15T12:14:44.617Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
<wsa:Action>urn:evolium:redtrust:dss:ws/RTDSSService/SignRequest</wsa:Action>
<wsa:To>https://[IP_REDTRUST]:8080/RTDSSService.svc/basic</wsa:To>
</soap:Header>
<soap:Body>
<SignRequest Profile="PAdES-LTV" RequestID="dss-sign-request-1" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<OptionalInputs>
<q1:VisibleSignatureConfiguration xmlns:q1="urn:oasis:names:tc:dssx:1.0:profiles:VisibleSignatures:schema#">
<q1:VisibleSignaturePolicy>GeneralPolicy</q1:VisibleSignaturePolicy>
<q1:VisibleSignaturePosition d4p1:type="q1:PixelVisibleSignaturePositionType" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">
<q1:PageNumber>1</q1:PageNumber>
<q1:x>30</q1:x>
<q1:y>20</q1:y>
<q1:Width>200</q1:Width>
<q1:Height>75</q1:Height>
</q1:VisibleSignaturePosition>
<q1:VisibleSignatureItemsConfiguration>
<q1:VisibleSignatureItem>
<q1:ItemName>SignatureReason</q1:ItemName>
<q1:ItemValue d4p1:type="q1:ItemValueStringType" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">
<q1:ItemValue>Razón de firma</q1:ItemValue>
</q1:ItemValue>
</q1:VisibleSignatureItem>
<q1:VisibleSignatureItem>
<q1:ItemName>SignatureProductionPlace</q1:ItemName>
<q1:ItemValue d4p1:type="q1:ItemValueStringType" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">
<q1:ItemValue>Barcelona</q1:ItemValue>
</q1:ItemValue>
</q1:VisibleSignatureItem>
<q1:VisibleSignatureItem>
<q1:ItemName>CustomText</q1:ItemName>
</q1:VisibleSignatureItem>
<q1:VisibleSignatureItem>
<q1:ItemName>SignerContactInfo</q1:ItemName>
<q1:ItemValue d4p1:type="q1:ItemValueStringType" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">
<q1:ItemValue>Usuario Demo (user@demo.com)</q1:ItemValue>
</q1:ItemValue>
</q1:VisibleSignatureItem>
<q1:VisibleSignatureItem>
<q1:ItemName>SignerImage</q1:ItemName>
<q1:ItemValue d4p1:type="q1:ItemValueImageType" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">
<Base64Data>...</Base64Data>
</q1:ItemValue>
</q1:VisibleSignatureItem>
</q1:VisibleSignatureItemsConfiguration>
</q1:VisibleSignatureConfiguration>
<Language>en-US</Language>
<KeySelector>
<KeyInfo Id="Thumbprint" xmlns="http://www.w3.org/2000/09/xmldsig#">403C7691336CDB7E04F9F272A602A4B42CBE298D</KeyInfo>
</KeySelector>
<SignatureForm xmlns="urn:evolium:redtrust:dss:1.0:core:schema">urn:oasis:names:tc:dss:1.0:profiles:PAdES:forms:LTV</SignatureForm>
</OptionalInputs>
<InputDocuments>
<Document ID="ID-document-1">
<Base64Data MimeType="application/pdf">...</Base64Data>
</Document>
</InputDocuments>
</SignRequest>
</soap:Body>
</soap:Envelope>

En la petición se puede ver la autenticación del usuario en la cabecera SOAP y el perfil de firma seleccionado en el atributo Profile del tag SignRequest que hace referencia al perfil definido en Redtrust. Puedes ver también el KeyInfo con el thumbprint certificado con el que se va a firmar, el tag SignatureForm que especifica que el nivel será LTV y el documento PDF que se va a firmar codificado en Base64 dentro del tag Base64Data (el atributo MimeType="application/pdf" especifica que el contenido del tag corresponde con un PDF).

La parte de representación visual de la firma se encuentra dentro del tag VisibleSignatureConfiguration y contiene:

TagDescripción
VisibleSignaturePolicyCon el texto GeneralPolicy, que es la única política de representación visual aceptada por Redtrust.
VisibleSignaturePositionEspecifica la localización (contando desde la esquina inferior izquierda) y tamaño en píxeles de la representación visual.
VisibleSignatureItemsConfigurationIncluye una secuencia de elementos que indican cómo va a ser la firma visual, en este caso se añade una razón (SignatureReason), un lugar donde se firmó (SignatureProductionPlace), una información de contacto del firmante (SignerContactInfo), un item CustomText que indica que la representación visual de la firma contendrá un texto descriptivo del certificado y un SignerImage que contiene la imagen a incrustar como firma visual codificada en Base64.
Respuesta
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">urn:evolium:redtrust:dss:ws/RTDSSService/SignRequestResponse</a:Action>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SignResponse RequestID="dss-sign-request-1" Profile="PAdES-LTV" xmlns="urn:oasis:names:tc:dss:1.0:core:schema">
<Result>
<ResultMajor>urn:oasis:names:tc:dss:1.0:resultmajor:Success</ResultMajor>
</Result>
<SignatureObject>
<Base64Signature Type="urn:ietf:rfc:3369">...</Base64Signature>
</SignatureObject>
</SignResponse>
</s:Body>
</s:Envelope>

En la respuesta puedes ver el estado general de la petición en el tag ResultMajor, un tag Base64Signature que contiene el fichero PDF con la firma codificado en Base64.

Si abres el archivo resultado con Adobe Acrobat Reader DC puedes comprobar la firma en el panel de firmas.