You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#下使用Xades库创建无URI属性的XML签名完整主体引用

如何实现无URI属性的ds:Reference的XAdES签名?

当然可以实现!没有URI属性的<ds:Reference>完全符合XML-DSig规范,它默认指代包含该签名的整个XML文档(也就是你的<document>根节点),这正好对应你期望结构里第一个Reference的作用。

你提到使用Caliper/Xades库时遇到未定义URI无法完成签名的问题,大概率是配置Reference对象时的小疏忽——这个库本身支持无URI的Reference,只需要在创建Reference实例时不设置URI属性(或者显式设置为null)即可。

举个.NET环境下的代码示例,对应你要实现的无URI Reference:

// 创建针对整个文档的无URI Reference
var documentReference = new Reference();
// 设置摘要算法
documentReference.DigestMethod = new DigestMethod("http://www.w3.org/2001/04/xmlenc#sha256");
// 添加你需要的转换规则
var transforms = new Transforms();
transforms.Add(new Transform("http://www.w3.org/2001/10/xml-exc-c14n#"));
documentReference.Transforms = transforms;

// 将这个Reference添加到SignedInfo集合中
var signedInfo = new SignedInfo();
signedInfo.CanonicalizationMethod = new CanonicalizationMethod("http://www.w3.org/TR/2001/REC-xml-c14n-20010315");
signedInfo.SignatureMethod = new SignatureMethod("http://www.w3.org/2000/09/xmldsig#rsa-sha1");
signedInfo.AddReference(documentReference);

// 后续再添加其他带URI的Reference(比如SignedProperties、KeyInfo的引用)
// ...

从你贴出的实际XML结构来看,最终生成的签名已经符合期望——第一个<ds:Reference>确实没有URI属性,如果你是生成过程中报错,检查一下是否误将URI设置为空字符串(有些库会把空字符串解析为无效URI,而非不生成该属性),完全不设置URI字段就能解决问题。

补充说明:XML-DSig规范明确规定,当<ds:Reference>省略URI属性时,签名目标就是包含该签名的整个XML文档,XAdES作为XML-DSig的扩展完全兼容这种用法,所以你的需求是完全可行的。

内容的提问来源于stack exchange,提问作者Mikerad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 13:47:35