.NET Framework XmlDocument未正确实现RFC3076规范问题问询
.NET Framework XmlDocument的RFC3076合规性问题导致XML签名验证失败
问题核心
.NET Framework的XmlDocument类未正确实现**RFC3076(Canonical XML Version 1.0)**规范,具体违反了第3.4节《字符修改与字符引用》的要求:处理字符引用(如
、 )时,未保留字符实体形式,而是直接将其解析为对应的CR(回车)字节。
对XML签名验证的影响
XML签名验证的核心前提是预计算摘要与运行时规范化后的文档摘要完全匹配。由于XmlDocument的规范化结果不符合RFC3076标准,使用.NET自带的XmlDocument结合SignedXml类进行签名验证时会失败;而采用合规第三方组件生成的规范化字节数组则能顺利通过验证。
示例对比
输入XML片段
<text>First line
 Second line</text>
XmlDocument处理后的输出(不符合规范)
<text>First line\r\nSecond\r line</text>
注:此处\r为直接解析后的CR字节,而非字符引用。
符合RFC3076规范的正确结果
<text>First line
 Second
 line</text>
注:严格保留了CR对应的字符引用形式,未替换为原始字节。
可行解决方案
- 替换为合规的第三方XML处理库,确保其实现严格遵循RFC3076规范
- 自定义实现符合RFC3076要求的XML规范化逻辑,绕过
XmlDocument的默认字符引用处理行为
内容的提问来源于stack exchange,提问作者Neil
相关产品推荐
相关产品推荐

