Proč záleží na bajtech
Pořadí atributů a zápis prázdného elementu mohou být v XML různé. Kanonizační algoritmus určuje jejich jednotný zápis. Výstup používá UTF-8, nerozepisuje XML deklaraci a prázdné elementy zapisuje párem značek.
<p b="2" a="1"/> <p a="1" b="2"></p> Co kanonizace nesjednotí
Whitespace v textu zůstává významový. Prefixy se obecně nepřejmenovávají a aplikací ekvivalentní čísla 1 a 1.0 zůstávají různá. Formatování před ověřením podpisu tak může změnit otisk.
Vyber správný algoritmus
C14N 1.0, C14N 1.1 a Exclusive C14N nejsou zaměnitelné. Exclusive C14N omezuje přenos namespace kontextu do podepisovaného fragmentu. Každý algoritmus má variantu s komentáři nebo bez nich; použij přesnou URI a parametry z podpisu.
Praktická kontrola
Pro jednoduchý lokální dokument lze porovnat xmllint --c14n11 soubor.xml s původním souborem. Neověří to XMLDSig: podpis také vybírá reference a transformace. Pro podpis použij knihovnu, která zpracuje celý řetězec, a po ověření čti přesně podepsaný uzel.
Reprodukovatelný C14N test
<p b="2" a="1"/> <p a="1" b="2"></p> xmllint --c14n11 a.xml > a.c14n
xmllint --c14n11 b.xml > b.c14n
cmp a.c14n b.c14n Výstup bez komentářů je <p a="1" b="2"></p>. Cmp má vrátit úspěch. Při vložení mezery jako obsahu p se kanonický výsledek změní: whitespace uvnitř elementu není jen volitelné odsazení. U celého dokumentu varianty libxml2 příkazu mohou zahrnovat komentáře, proto variantu a konkrétní chování příkazu ověř podle použití; neodvozuj algoritmus podpisu pouze od názvu přepínače.
Pro XMLDSig použij přesný algoritmus a transformace uvedené v SignedInfo a Reference. C14N 1.1 například řeší některé otázky xml:base a xml:id jinak než 1.0. Exclusive C14N má jiná pravidla přenosu namespace. Prostor s relativním URI může kanonizátor odmítnout; používej platné absolutní identifikátory. Specifikace: Canonical XML 1.1.
Komentáře: rozhoduje algoritmus, ne vzhled výstupu
„Kanonický XML soubor“ není jednoznačný údaj bez názvu algoritmu. Varianta s komentáři zahrne uzly komentářů do výsledných bajtů; varianta bez komentářů je vynechá. Stejné dva dokumenty proto mohou mít stejný otisk v jedné variantě a jiný ve druhé.
U podpisu nevybírej algoritmus odhadem podle pěkného výstupu. Ověř jeho URI a parametry uvedené v SignedInfo i u jednotlivých Reference. Formátovač mění odsazení a může přidat textové bílé znaky, které kanonizace neodstraní. Přesné varianty stanoví Canonical XML 1.1.