|
Para la comprensión de este ejemplo, se recomienda haber entendido previamente el ejemplo de Generación de una firma CMS/PKCS#7
El elemento dss:SignRequest, indica al sistema que se trata de una petición de firma. A su vez, este elemento contiene todos los elementos opcionales deseados, por ejemplo se indica mediante el elemento css:Name el certificado del firmante en este caso en formato Distinguished Name/X509SubjectName.
También se indica mediante el elemento css:KeyInfoType con formato X509SubjectName, que la petición de respuesta retorne información de la clave en formato Distinguished Name/X509SubjectName
Por otro lado se realiza una firma de un documento, por lo que se añade el elemento dss:Document que incluye en formato XML, el documento sobre el que se quiere firmar .
Por último, como puede observarse en el ejemplo, no se ha incluido explícitamente el tipo de firma XML entendiéndose entonces que se está pidiendo en la respuesta, una firma separada del documento original.
En sucesivas peticiones de firma, se mostrarán los otro dos tipos de peticiones que permite una firma XML, es decir el tipo que permite añadir la firma resultante dentro del documento original o firma envuelta (enveloped) y la que permiten añadir el documento dentro de la firma generada o firma envolvente (enveloping).
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" 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">
<SOAP-ENV:Header><wsse:Security><wsse:UsernameToken wsu:Id="SecurityToken-4505729303387484391"><wsse:Username>trustedx</wsse:Username><wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">trustedx</wsse:Password></wsse:UsernameToken></wsse:Security></SOAP-ENV:Header>
<SOAP-ENV:Body wsu:Id="Id-9027040566202249815">
<dss:SignRequest xmlns:css="http://www.safelayer.com/TWS" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:dss="http://www.docs.oasis-open.org/dss/2004/06/oasis-dss-1.0-core-schema-wd-27.xsd" xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion" xmlns:xades="http://uri.etsi.org/01903/v1.2.2#" Profile="urn:safelayer:tws:dss:1.0:profiles:xades:1.0:sign" RequestID="Id-2828846405853607976">
<dss:OptionalInputs><dss:KeySelector><css:KeySelector><css:Name Format="urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName">CN=trustedx, OU=Demo, O=TrustedX, C=ES</css:Name></css:KeySelector></dss:KeySelector><css:AddSignatureKeyInfo><css:KeyInfoType>X509SubjectName</css:KeyInfoType></css:AddSignatureKeyInfo></dss:OptionalInputs><dss:InputDocuments><dss:Document><dss:XMLData><trustedx Id="data"><example Id="node1">Simple xml file</example><description Id="node2" format="text">XMLDSig/XAdES TrustedX signatures</description></trustedx></dss:XMLData></dss:Document></dss:InputDocuments></dss:SignRequest>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
| | | | | | | |
La explicación siguiente, hace referencia a la respuesta obtenida por la plataforma TrustedX una vez enviada la petición, por lo que se debe pulsar el botón de "probar" anterior para la generación de esta respuesta.
En primer lugar, la firma (dsig:Signature) se ha realizado mediante con el formato XML, pudiendo ver que es separada o detached ya que el elemento dsig:Object, no contiene el documento a firmar. En caso contrario, la firma sería envolvente (enveloping).
Una firma XML consta de diversas partes, la primera de ellas es una referencia (dsig:Reference) desde la propia firma hacia los datos firmados. Esta referencia se indica desde el atributo URI="#data". Para comprobar que los datos presentados a partir de la referencia siempre coinciden, se añade una canonicalización o c14n (dsig:Transform) en este caso exclusiva, para que cualquier posible representación XML del mismo documento coincida. Una vez canonicalizado el documento, se realiza un hash que se deposita en el elemento dsig:DigestValue. Existe una segunda referencia que realiza las mismas operaciones, pero en este caso con las propiedades firmadas (xades:SignedProperties)
El valor de la firma puede encontrarse en el elemento dsig:SignatureValue.
Debido a que en la petición de firma, se ha incluido el elemento opcional css:AddSignatureKeyInfo, ahora en la respuesta puede observarse que se ha quien es el firmante del documento (dsig:KeyInfo). Concretamente en este caso con un estilo Distinguished Name/X509SubjectName. |