Pregunta

Tengo un documento XML que tiene una estructura similar a la siguiente

<envelop>
    <header>blaa</header>
    <message>blaa blaa</message>
    <footer></footer>
</envelop>

Quiero firmar digitalmente los elementos de encabezado y mensaje y agregar la firma al elemento de pie de página.

¿Cómo puedo firmar los elementos y luego verificar la firma (usando .net c #)?

¿Fue útil?

Solución

Debería poder agregar una Transformación XPath a la Firma. Debería verse más o menos así:

       <Transform Algorithm="http://www.w3.org/TR/1999/REC-xpath-19991116">
         <XPath xmlns:dsig="&dsig;">
         ...
         </XPath>
       </Transform>

No soy fluido en XPath, pero debería ser fácil formular una expresión XPath que excluya el elemento Footer. (Pero tenga en cuenta que XPath es una parte opcional de XML-DSIG, por lo que no todas las implementaciones pueden admitirlo).

Alternativamente, si pudiera reestructurar su documento para que sea

<envelop>
  <header>blaa</header>
  <message>blaa blaa</message>
  <Signature></Signature>
</envelop>

o

<envelop>
  <signedEnvelope>
    <header>blaa</header>
    <message>blaa blaa</message>
  </signedEnvelope>
  <Signature></Signature>
</envelop>

puede manejarlo utilizando una Transformación de firma envolvente (primer caso) o firmando el elementoignedEnvelope (segundo caso).

Otros consejos

Hay un socio de Microsoft que podría ser bastante bueno para esto. Le permiten agregar firmas digitales para XML (así como todas las demás plataformas). Recomiendo revisar su producto, se llama cosign.

¿Por qué no seguir la recomendación de w3 para la firma XML? http://www.w3.org/ 2000/09 / xmldsig # tiene una estructura básica:

<Signature>
   <SignedInfo>
      <SignatureMethod />
      <CanonicalizationMethod />
      <Reference>
         <Transforms>
         <DigestMethod>
         <DigestValue>
      </Reference>
      <Reference /> etc.
   </SignedInfo>
   <SignatureValue />
   <KeyInfo />
   <Object />
</Signature>

Si desea funciones más avanzadas, lea sobre XAdES: creo que está disponible en c #.

Veo que esta publicación es antigua, pero tal vez alguien tiene la misma necesidad ahora. Lo que necesita es, de alguna manera, una firma envuelta en XMLDSIG. La diferencia es que en XMLDSIG debe incluir los datos de la firma en un nodo Firma .

Si desea hacer esto, debe implementarlo usted mismo.

Estoy involucrado en un proyecto para desarrollar una biblioteca para proporcionar soporte XAdES para .NET Framework.

Acabamos de lanzar la versión 1.0, que proporciona soporte temprano para XAdES-BES.

Puede encontrarlo en Proyecto XAdES .NET

Espero que el código fuente pueda ayudarte de alguna manera.

Saludos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top