XML数字签名的规范化与签名验证陷阱
解析XML规范化(C14N)对签名的影响,处理空白、命名空间、注释等语义等价变体导致的签名失败。 · 难度:入门 · +10XP
C14N规范化与签名验证
XML数字签名基于字节级哈希,但语义等价的XML变体(如属性顺序、空白)会导致签名失效。本教程讲解排他性规范化(Exclusive C14N)和包含性规范化(Inclusive C14N)的区别,并演示如何在签名前通过java.security库或lxml进行规范化。同时讨论CanonicalizationMethod参数对签名验证成功率的决定性作用。
<Signature xmlns=\"http://www.w3.org/2000/09/xmldsig#\">
<SignedInfo>
<CanonicalizationMethod Algorithm=\"http://www.w3.org/2001/10/xml-exc-c14n#\"/>
<SignatureMethod Algorithm=\"http://www.w3.org/2001/04/xmldsig-more#rsa-sha256\"/>
<Reference URI=\"#object\">
<Transforms>
<Transform Algorithm=\"http://www.w3.org/2000/09/xmldsig#enveloped-signature\"/>
<Transform Algorithm=\"http://www.w3.org/2001/10/xml-exc-c14n#\"/>
</Transforms>
</Reference>
</SignedInfo>
</Signature>