如何计算包含SignedProperties的XML XAdES签名?
XAdES 签名的正确输入规则
你之前尝试的操作均不符合XML签名的标准流程,正确的签名输入需要严格遵循以下要求:
- 签名的输入对象是规范化后的完整
<SignedInfo>元素字节流,不能去掉SignedInfo标签,也不能直接拼接两个DigestValue做签名 - 首先要匹配SignedInfo中
CanonicalizationMethod节点指定的规范化算法(最常用的是http://www.w3.org/2001/10/xml-exc-c14n#排他规范化算法),对整个SignedInfo节点(含开始、结束标签、所有子元素、属性)执行规范化处理 - 规范化处理时不需要手动调整标签格式:空标签的书写形式、空格、换行、命名空间声明都会由规范化算法自动按照标准统一输出,手动修改会导致结果错误
- 规范化完成后,先按照
SignatureMethod指定的哈希算法对规范化后的SignedInfo字节流计算哈希,再用签名私钥对该哈希值执行签名运算,最终将签名结果Base64编码后写入<SignatureValue>节点
补充校验点:你需要先确认SignedInfo内两个Reference的DigestValue是正确的:主文档、SignedProperties对象都需要先执行各自Reference中指定的规范化算法、再计算哈希得到DigestValue,任意一个DigestValue错误都会导致后续SignedInfo的签名结果错误
内容的提问来源于stack exchange,提问作者user17477799
相关产品推荐
相关产品推荐

