Domanda

Ho un documento XML con una struttura simile alla seguente

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

Voglio firmare digitalmente l'intestazione e gli elementi del messaggio e aggiungere la firma all'elemento piè di pagina.

Come posso firmare gli elementi e successivamente verificare la firma (usando .net c #)?

È stato utile?

Soluzione

Dovresti essere in grado di aggiungere una trasformazione XPath alla firma. Dovrebbe assomigliare a questo:

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

Non sono fluente in XPath, ma dovrebbe essere facile formulare un'espressione XPath che escluda l'elemento Footer. (Si noti che XPath è una parte facoltativa di XML-DSIG, quindi non tutte le implementazioni potrebbero supportarlo).

In alternativa, se potessi ristrutturare il tuo documento in

<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>

è possibile gestirlo utilizzando una trasformazione Firma inviluppata (primo caso) o firmando l'elemento signedEnvelope (secondo caso).

Altri suggerimenti

C'è un partner Microsoft che potrebbe essere abbastanza buono per questo. Ti consentono di aggiungere firme digitali per XML (così come tutte le altre piattaforme). Consiglio di controllare il loro prodotto, si chiama cosign.

Perché non seguire la raccomandazione di w3 per la firma XML http://www.w3.org/ 2000/09 / xmldsig # ha una struttura di base:

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

Se vuoi funzionalità più avanzate, leggi XAdES - penso che sia disponibile in c #.

Vedo che questo post è vecchio, ma forse qualcuno ha lo stesso bisogno ora. Quello che ti serve è in qualche modo una firma racchiusa in XMLDSIG. La differenza è che in XMLDSIG devi includere i dati della firma in un nodo Firma .

Se vuoi farlo, devi implementarlo da solo.

Sono coinvolto in un progetto per sviluppare una libreria per fornire supporto XAdES per .NET Framework.

Abbiamo appena rilasciato la versione 1.0, che fornisce supporto anticipato per XAdES-BES.

Puoi trovarlo in Progetto XAdES .NET

Spero che il codice sorgente possa aiutarti in qualche modo.

Saluti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top