Je souhaite créer un fichier contenant plusieurs signatures indépendantes référençant les mêmes données. Je veux que les données soient stockées dans le fichier XML de sortie, en tant que frères et soeurs à ds:Signature
éléments, comme ci-dessous (uniquement avec plusieurs ds:Signature
éléments):Signature interne détachée XAdES
<?xml version="1.0" encoding="UTF-8"?>
<internally-detached>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod
Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
<ds:SignatureMethod
Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<ds:Reference URI="#data">
<ds:DigestMethod
Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue/>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue/>
</ds:Signature>
<document Id="data">
<title>title</title>
<author>writer</author>
<date>today</date>
<content>
<para>First paragraph</para>
<para>Second paragraph</para>
</content>
</document>
</internally-detached>
Source: https://msdn.microsoft.com/en-us/library/ms759193(v=vs.85).aspx (je suis conscient que le site ne mentionne pas la norme XAdES).
J'ai essayé d'appliquer à une signature XAdES enveloppants valide et mettre le noeud ds:Object
référencé en dehors de l'élément ds:Signature
, mais le logiciel de vérification renvoie une erreur (nœud référencé n'a pas été trouvé), et le module de vérification de xades4j échoue après avoir rencontré la </internally-detached>
tag.
Une signature détachée en interne est-elle possible avec XAdES? Si oui, comment puis-je y parvenir? Je sais que plusieurs signatures sont possibles lorsque les données sont stockées dans un fichier distinct: l'élément SignedProperties de chaque signature doit contenir SignedDataObjectProperties avec ObjectReference, et l'URI de l'élément Reference de SignedInfo doit pointer vers le fichier.
Merci, malheureusement mon logiciel de vérification ne montre pas la signature générée comme valide (après la fusion avec le document XML de base bien sûr) - « certificat erreur d'intégrité ". Ce que je voulais dire par "xades4j ne permet même pas ..." est que le module de vérification de xades4j renvoie une erreur pour mon fichier de signature modifié manuellement (j'ai mis à jour la question pour être plus précis). Je suis plus intéressé par la structure finale du fichier de signature de sortie que par la façon de le faire dans xades4j (je dois implémenter moi-même la signature), peut-être pourriez-vous poster un exemple? – bmscicho
Bizarre; ça devrait être valide. Qu'entendez-vous par "fusion"? Vous devriez simplement sérialiser le document DOM à la fin et utiliser le fichier résultant pour la vérification. Quant à la sortie finale, j'ai mis à jour la réponse. Si vous avez besoin de détails sur la structure XAdES, jetez un oeil aux tests xades4j, qui contiennent des échantillons. – lgoncalves
OK, je l'ai fait (et le fichier de sortie est le même que lorsque je "fusionné" - je mets le fichier ensemble à la main;). Le numéro de série du certificat est écrit comme un nombre négatif - et c'est (je pense) pourquoi la signature est invalide. – bmscicho