Question

J'essaie d'implémenter une spécification de l'industrie qui nécessite des signatures numériques XML enveloppées (XMLDSIG). Au lieu de se conformer aux exemples (<Signature>), ma spécification utilise son propre nom pour l'élément de signature:

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

L'élément n'est donc pas nommé 'Signature' et se trouve dans l'espace de noms XML du domaine au lieu de l'espace de noms XML dsig.

Avec beaucoup de travail supplémentaire, je peux créer cette signature personnalisée dans .NET.

  1. En utilisant la classe .NET SignedXml, je crée l'élément
  2. Je manipule le DOM pour supprimer et recréer l'élément comme .

Mais il semble que .NET ne puisse pas vérifier le entrant, même si je renomme l'élément entrant en .

J'ai examiné la spécification XMLDSIG plusieurs fois, et bien que tous leurs exemples utilisent , il ne semble pas exiger spécifiquement ce nom d'élément, même pour les transformations enveloppées. Est-ce donc un bogue dans SignedXml qu'il ne prend en charge ce nom d'élément unique que lorsqu'il n'y a pas une telle exigence dans la spécification XMLDSIG?

Était-ce utile?

La solution

L'utilisation d'un nom d'élément non standard n'est pas possible dans .NET.Mais le nom de l'élément de signature ne fait pas partie du résumé, vous pouvez donc supprimer l'élément de signature `` personnalisé '' et ajouter un nom d'élément de signature `` standard '' (), mais veillez à ne pas modifier les espaces ou les espaces de noms dans SignedInfoélément, car SignedInfo EST partie du condensé.Dans la méthode de canonisation que j'utilise, les espaces sont significatifs, tout comme l'espace de noms des éléments.

  1. charger du XML dans XmlDocument
  2. rechercher
  3. créer un nouvel élément
  4. déplacer tous les enfants de vers
    • Veillez à ne pas perturber le contexte d'espace blanc ou d'espace de noms de .
  5. remplacer par
  6. vérifier la signature à l'aide de la classe .NET SignedXml
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top