Question

J'ai un document XML ayant une structure similaire à celle-ci

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

Je souhaite signer numériquement les éléments d'en-tête et de message et ajouter la signature à l'élément de pied de page.

Comment signer les éléments puis vérifier la signature ultérieurement (à l'aide de .net c #)?

Était-ce utile?

La solution

Vous devriez pouvoir ajouter un XPath-Transform à la signature. Cela devrait ressembler à ceci:

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

Je ne parle pas couramment XPath, mais il devrait être facile de formuler une expression XPath excluant l'élément Footer. (Notez toutefois que XPath est une partie optionnelle de XML-DSIG. Par conséquent, toutes les implémentations ne peuvent pas la prendre en charge.)

Sinon, si vous pouviez restructurer votre document pour le rendre

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

ou

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

vous pouvez le gérer en utilisant une transformation de signature enveloppée (premier cas) ou en signant l'élément signedEnvelope (deuxième cas).

Autres conseils

Il existe un partenaire Microsoft qui pourrait être très utile pour cela. Ils vous permettent d'ajouter des signatures numériques pour XML (ainsi que pour toutes les autres plates-formes). Je recommande de vérifier leur produit, il s’appelle cosign.

Pourquoi ne pas suivre la recommandation w3 pour la signature XML http://www.w3.org/ 2000/09 / xmldsig # , sa structure est la suivante:

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

Si vous souhaitez des fonctionnalités plus avancées, consultez XAdES - je pense que c’est disponible en c #.

Je vois que ce billet est vieux, mais peut-être que quelqu'un a le même besoin maintenant. Ce dont vous avez besoin ressemble en quelque sorte à une signature enveloppée dans XMLDSIG. La différence est que dans XMLDSIG, vous devez inclure les données de signature dans un nœud Signature .

Si vous voulez faire cela, vous devez l'implémenter vous-même.

Je suis impliqué dans un projet visant à développer une bibliothèque fournissant un support XAdES pour le .NET Framework.

Nous venons de publier la version 1.0, qui fournit une prise en charge précoce de XAdES-BES.

Vous pouvez le trouver dans le projet XAdES .NET

.

J'espère que le code source pourra vous aider d'une manière ou d'une autre.

Cordialement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top