Pregunta

Estoy tratando de implementar una especificación de la industria que requiere firmas digitales XML envueltas (XMLDSIG). En lugar de conformarse con los ejemplos (<Signature>) Mi especificación usa su propio nombre para el elemento de firma:

<xs:element name="ensembleSignature" type="dsig:SignatureType" />
<!-- wish this was:  <xs:element ref="dsig:Signature" />  -->

Entonces, el elemento no se llama 'firma' y está en el espacio de nombres XML del dominio en lugar del espacio de nombres DSIG XML.

Con mucho trabajo adicional, puedo crear esta firma personalizada en .NET.

  1. Usando la clase .NET firmedxml, creou003Cdsig:Signature> elemento
  2. Manipulo el DOM para eliminaru003Cdsig:Signature> y recrear el elemento comou003Cmyns:ensembleSignature> .

Pero parece que .net no puede verificar el entranteu003Cmyns:ensembleSignature> , incluso si cambio el nombre del elemento entrante para volver au003Cdsig:Signature> .

He estado sobre la especificación de XMLDSIG muchas veces, y aunque todos sus ejemplos se usanu003CSignature> No parece requerir específicamente este nombre de elemento, incluso para transformaciones envueltas. Entonces, ¿es este un error en firmedxml de que solo admite este nombre de elemento único cuando no hay tal requisito en la especificación XMLDSIG?

¿Fue útil?

Solución

Usar un nombre de elemento no estándar no es posible en .NET. Pero el nombre del elemento de firma no es parte del resumen, por lo que puede eliminar el elemento de firma 'personalizado' y agregar un nombre de elemento de firma 'estándar' (u003CSignature> ) Pero tenga cuidado de no cambiar ningún espacio en blanco o espacios de nombres en el elemento FirmedInfo, porque firmedInfo ES parte del resumen. En el método de canonicalización, estoy usando Whitpace es significativo, y también lo es el espacio de nombres de los elementos.

  1. Cargar XML en XMLDocument
  2. encontraru003CcustomSignature xmlns="http://b-to-b.com/Namespace">
  3. crear un nuevo elementou003CSignature>
  4. mover a todos los niños deu003CcustomSignature> a
    • Tenga cuidado de no perturbar el espacio en blanco o el contexto del espacio de nombres deu003CSignedInfo> .
  5. reemplazaru003CcustomSignature> conu003CSignature>
  6. Verifique la firma usando la clase .NET firmedxml
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top