问题标签 [xml-dsig]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
289 浏览

.net - 使用 SignedXml 验证部分文档的 xml 签名

我正在使用 SignedXml 类来验证 XML 文档中的签名。签名仅指文件的一部分。

我能够验证签名,但如何确定签名正在签署我需要验证的文档的特定部分?有人可以简单地使用相同的密钥签署文档的不同部分,并且签名仍然有效。

0 投票
1 回答
828 浏览

.net - 在 .NET 中验证 XMLDSIG 链?

我正在使用 XMLDSIG签署配置文件。我希望我的 CA 能够颁发可用于签署 XML 的密钥。然后,我想验证 XML 是否使用我的 CA 颁发的密钥进行签名。

如何从SignedXml对象中获取签名证书?如何按照证书链返回特定 CA?

请注意,我的 CA 的公钥将存储在我的可执行文件中,而不是证书存储中。

0 投票
2 回答
2233 浏览

.net - 如何比较 .NET 中的公钥?

我有一个X509Certificate2包含公钥。我有一个RSACryptoServiceProvider(来自调用SignedXml.CheckSignatureReturningKey),也包含一个公钥。

我想知道一个是否来自另一个。我如何比较两者?

0 投票
1 回答
1343 浏览

.net - XML DSIG:在 .NET 中封装签名转换

我正在使用XmlDsigEnvelopedSignatureTransform 使用 RSA 私钥对 XML 文件进行数字签名。

但是,我真正想要的是使用“封装”签名对 xml 进行签名。.NET 对此有本机支持吗?

顺便说一句,这是我的代码:

0 投票
1 回答
807 浏览

.net - .NET 不支持非标准 XMLDSIG 签名元素名称

我正在尝试实现需要封装 XML 数字签名 (XMLDSIG) 的行业规范。我的规范不符合示例 ( <Signature>),而是使用自己的名称作为签名元素:

因此,该元素未命名为“Signature”,并且位于域的 XML 命名空间而不是 dsig XML 命名空间中。

通过大量额外的工作,我可以在 .NET 中创建这个自定义签名。

  1. 我使用 .NET SignedXml 类创建 <dsig:Signature> 元素
  2. 我操作 DOM 以删除 <dsig:Signature> 并将元素重新创建为 <myns:ensembleSignature>。

但似乎 .NET 无法验证传入的 <myns:ensembleSignature>,即使我将传入元素重命名回 <dsig:Signature>。

我已经多次阅读过 XMLDSIG 规范,尽管他们的所有示例都使用 <Signature> 它似乎并不特别需要这个元素名称,即使对于封装转换也是如此。那么这是 SignedXml 中的一个错误,即当 XMLDSIG 规范中没有这样的要求时,它只支持这个单个元素名称?

0 投票
1 回答
1022 浏览

c# - 我可以在 .NET 中验证 XMLDSIG 签名而不需要安装根证书吗?

我想使用 XMLDSIG 来验证 .config 文件是否未被篡改。我还希望能够验证签名链,以便我可以信任签名。

我在链中获得了三个证书:

我检查该文件是否使用中间 CA 颁发的密钥进行签名。

我想这样做而不在用户的 Windows 证书存储中安装任何证书。这些是自签名证书,所以不是每个用户都希望我将它们安装在他们的根存储中。在我的根存储中安装它们没有问题。

我有原始的 .CER 文件——它们包含在签名块中,我可以将它们与验证码一起包含。我可以使用X509ChainPolicy.ExtraStore.

如果证书未安装在根存储中,并且我验证了链,则X509Chain.Build返回false,并且链中有 a X509ChainStatusFlags.UntrustedRoot

我可以仅在此操作期间添加受信任的证书吗?

0 投票
2 回答
1576 浏览

xml - 使用 DSIG 为 XML 加时间戳

我需要给 XML 文件加上时间戳。有什么解决方案吗?我可以制作数字签名并将其放入 XML-DSIG 结构中,但我需要使用时间戳来完成。原则上是相同的过程。签名我自己做,时间戳做 TSA(时间戳权威)。

是的,当然,我可以像制作 clasis 签名一样制作散列。来自 TSA 的回应加入了一些元素(例如 )。但它似乎并不干净。并且无法使用可用工具(XML-DSIG 工具)进行验证。

谢谢你的建议。

0 投票
1 回答
1481 浏览

php - 从 DER ASN.1 到 XMLDSIG P1363 的 PHP DSA 签名转换

我正在编写一个 PHP 应用程序(充当 SAML IdP),它试图通过对服务器的 SAML 响应进行登录(充当 SAML SP。我目前被服务器拒绝请求(我只得到 500错误的请求)。

我已经编写了一个测试应用程序(在 Java/openSAML 中 - 我很确定服务器正在使用它),并且可以看到问题是 SAML SignatureValidator validate 生成

org.apache.xml.security.signature.XMLSignatureException:DSA 签名的 XMLDSIG 格式无效

查看SAML SignatureValidator 代码,我可以看到它检查 XMLDISG 签名的长度是否正好为 40 字节(P1363 格式?) - 而生成的签名长度为 46-48 字节(DER ASN.1 格式?)。

签名由 PHP openssl_sign 生成,如下所示。

示例签名(为清楚起见显示为二进制到十六进制)如下。这是 46 字节,但我注意到它从 46 字节到 48 字节不等(取决于随机密钥?)。

302c02146e74afeddb0fafa646757d73b43bca688a12ffc5021473dc0ca572352c922b80abd0662965e7b866416d

我可以使用 PHP openssl_verify 成功验证此签名,如下所示。

但是在我的测试应用程序中,当我执行 SignatureValidator 验证(如下所示)时,我得到了XMLSignatureException: Invalid XMLDSIG format of DSA signature异常。

有谁知道如何将 PHP 签名从 PHP openssl_sign 生成的 46-48 DER ASN.1 格式转换为 openSAML 预期的 40 字节 P1363 格式?

0 投票
1 回答
100 浏览

xml - 如何确定要从算法 URI 创建的对象的类别

由于对我施加的规范,我编写了自己的 C# 代码来签署 XML,并验证签署的 XML。很像 SignedXml 类,但这样我更灵活,例如是否使用 XML 命名空间前缀(似乎 SignedXml 不喜欢签名 XML 中的命名空间前缀,但我的 XML 规范说我必须拥有它们),并且在签名算法(规范现在说 sha256)。

一切似乎都有效,但困扰我的一个“不完美”是 - 例如 - 在验证 xml 时,我需要使用特定类别的对象来转换或验证数据,而我所要做的只是指定的算法 URI在 XML 中。一个例子是规范化:如果 XML 说"http://www.w3.org/2001/10/xml-exc-c14n#"知道我可以使用XmlDsigExcC14NTransform该类,但我的问题是:有没有办法从这样的 URI(或任何 URI)到特定的对象类?

我现在使用我已知的 URI 列表和它们引用的对象类(我认为)(或将其与已知对象类列表的算法属性进行比较,例如XmlDsigExcC14NTransform.Algorithm),这并不是我真正喜欢的。

0 投票
3 回答
1466 浏览

c# - Xsd2Code 和 xmldsig

我在使用 Xsd2Code 从 xsd 生成代码时遇到问题。xsd 看起来像这样:

当我尝试序列化生成类的实例时遇到的错误:

错误发生在这里:

如果我将该属性更改为:

..我得到其他错误:

有人成功使用 Xsd2Code 和 xmldsig 吗?如果可能的话,我宁愿用 Xsd2Code 生成器而不是手动解决这个问题。还有其他选择吗?