Domanda

Sto cercando di implementare una specifica del settore che richiede firme digitali XML avvolte (XMLDSIG). Invece di conformarsi agli esempi (<Signature>) la mia specifica usa il proprio nome per l'elemento firma:

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

Quindi l'elemento non è chiamato "firma" ed è nello spazio dei nomi XML del dominio invece dello spazio dei nomi DSIG XML.

Con molto lavoro extra posso creare questa firma personalizzata in .NET.

  1. Usando la classe .NET SIGNEDXML CREAu003Cdsig:Signature> elemento
  2. Manipolo il DOM per rimuovereu003Cdsig:Signature> e ricreare l'elemento comeu003Cmyns:ensembleSignature> .

Ma sembra che .net non possa verificare la entratau003Cmyns:ensembleSignature> , anche se rinomino l'elemento in arrivo au003Cdsig:Signature> .

Sono stato sopra le specifiche XMLDSIG e sebbene tutti i loro esempi utilizzinou003CSignature> Non sembra richiedere specificamente questo nome elemento, anche per le trasformazioni avvolte. Quindi questo è un bug in Signedxml che supporta solo questo nome a singolo elemento quando non vi è tale requisito nelle specifiche XMLDSIG?

È stato utile?

Soluzione

L'uso di un nome di elemento non standard non è possibile in .NET. Ma il nome dell'elemento firma non fa parte del digest, quindi è possibile rimuovere l'elemento firma "personalizzato" e aggiungere un nome dell'elemento di firma "standard" (u003CSignature> ) ma fai attenzione a non cambiare spazio bianco o spazi dei nomi nell'elemento firma È parte del digest. Nel metodo di canonicalizzazione sto usando lo spazio bianco è significativo, così come lo spazio dei nomi degli elementi.

  1. Carica XML in XMLDocument
  2. trovau003CcustomSignature xmlns="http://b-to-b.com/Namespace">
  3. Crea nuovo elementou003CSignature>
  4. spostare tutti i bambini diu003CcustomSignature> a
    • Fare attenzione a non disturbare lo spazio bianco o lo spazio dei nomi diu003CSignedInfo> .
  5. sostituireu003CcustomSignature> insieme au003CSignature>
  6. Verifica la firma utilizzando la classe .NET firmata
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top