问题标签 [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 投票
0 回答
1086 浏览

java - Java - 使用 Santuario/xmlsec 签署 XML 文档的问题

我在使用 Apache xmlsec 库对 XML 文档进行数字签名时遇到了一些问题。基于很少的文档和网络上的一些示例,我将以下代码放在一起:

这是包含我要签名的元素的文件:

我们需要使用定义的 wsu:Id 值对这三个部分进行签名,但是当我调用 XMLSignature.sign 时,我得到的是:

显然,我遗漏了一些关于如何告诉库需要签名的文档元素在哪里的信息,但我不知道该怎么做。我试图让一个基本的签名首先工作,但最终,这就是我们试图让它产生的:

任何帮助将不胜感激。

0 投票
1 回答
565 浏览

java - 如何使用 java.security 验证 xmldsig 签名

我需要使用 java.security 包验证带有封装 xml-dsig 签名的文档。加载后,我根据 xsd 解组文档并具有签名对象 - http://www.w3.org/2000/09/xmldsig#

然后:

调用getPublicKey并验证,结果我得到签名长度不匹配,如果我没有编码签名我没有不匹配,但验证也是错误的,但我使用完全有效的测试数据。放弃寻找错误,帮助我。请。文件编码为 UFT-8。

0 投票
1 回答
630 浏览

xml - X.509 证书的手动验证,与 XML 中的文档捆绑在一起

我有一份政府签发的文件,格式如下(由于包含一些个人信息,因此被删减了很多),其中包含一个 doc/docx 文件和一个以 base64 编码的证书:

不管是谁给我发了这份文件,都希望我下载并安装一个能够打开文件并验证签名的“特殊程序”。

由于这种“神秘格式”是一个简单的 XML,我想将其中的信息转换为其他格式,无需他们的专用软件即可打开或验证。理想情况下,输出将是以下之一:

  1. 单独的文件和证书文件。
  2. 带有嵌入证书的签名文档,可在例如 MS Word 中打开。

从我目前收集到的信息来看,这些是感兴趣的领域:

但我不知道从这里做什么。

我的问题:

  1. 根据上面给出的 XML 的内容,我需要采取哪些步骤来手动验证文档,使用众所周知的工具?如果它很重要,我会很感激适用于 Windows 的步骤。欢迎使用口头和伪代码解决方案!
  2. 是否可以将此信息重新组合成有效的、签名的 MS Word 文档?如果是这样 - 如何?

PS
如果这个问题更适合Information Security,请发表评论,我会将其标记为迁移。

0 投票
1 回答
1040 浏览

java - Java - 使用 ECDSA(椭圆曲线)创建 XML 数字签名

我们可以使用 RSA 密钥创建 XML 数字签名。但是如何使用椭圆曲线密钥来签署 xml 文件?我收到错误消息,例如 -

我使用下面的代码来创建 SignatureMethod 和 KeyInfo -

JDK - Oracle JDK 8 安全提供程序 - BouncyCastle 和 Sun。

0 投票
0 回答
50 浏览

xml - 如何使用 RFC 3275 标准在 Scala 中签署 XML?

我正在寻找一种自动签署 XML 请求的实现。但是,我认为将值直接放入代码中并不是一个好主意。我有几个不清楚的点:

  • 我应该如何将摘要值、签名值、X509 证书导入(阅读:通常是如何完成的)代码?

  • 有没有办法在没有第三方库的情况下实现它?

任何建议将不胜感激。

0 投票
1 回答
617 浏览

php - 如何在 PHP 中使用 ECDSA(NIST 曲线 P-256/SHA-256)签署 SAML 2.0 AuthnRequest

我需要在 PHP 中使用 ECDSA(​NIST Curve P-256/​SHA-256)签署 SAML 2.0 AuthnRequest。

要创建 SAML 2.0 AuthnRequest,我正在使用https://github.com/simplesamlphp/simplesamlphp

我有一个私钥

为了创建签名,我使用https://github.com/phpecc/phpecc因为https://github.com/robrichards/xmlseclibs似乎不支持 NIST Curve P-256/SHA-256

我已经完全实现了这个示例https://github.com/phpecc/phpecc/blob/HEAD/examples/creating_signature.php但我从请求接收器中收到错误。

我从哪里获得或如何创建<ds:DigestValue>...</ds:DigestValue>

我做错了什么?我使用了错误的库吗?是否有一个供应商支持这种情况?

0 投票
1 回答
584 浏览

php - 使用 xmldsig (RobRichards\XMLSecLibs) 签名的 XML 文件,但 XSD 验证失败


我安装了 RobRichards\XMLSecLibs PHP 库来签署我的 XML 文件。这些文件必须根据我们拥有的 XSD 文件生成

所以,在我的 PHP 代码中,我写了这个:

生成的 XML 文件是:

当我尝试验证此文件时,出现以下错误:

我怎样才能解决这个问题?我可以在我的代码中更改某些内容以使此 XML 有效吗?因为,既然我是从外部权威那里收到这个 XSD 的,它应该是不可触碰的

0 投票
1 回答
1420 浏览

c# - C# 中的 SignXml 无法验证它自己的签名

我正在努力替换不再维护的遗留应用程序。除了数字签名方法外,我已经更换了大多数东西。我在 .net 核心中有一个实现,我有点困惑为什么它无法验证它自己的签名文档。

考虑以下 xml(代码很乱,目前只运行一个 poc):

使用以下 C#:

这会产生以下 xml(cert、sig、hash、serial 是实际值的占位符,并且已被编辑以在此处发布):

但是,尝试验证它失败并使用以下代码:

签名总是失败。我查看了许多其他堆栈溢出问题,其中大多数涉及空格问题(所有文档都忽略空格,并且所有源在读入之前都被线性化)或在规范化方法期间将“ds”命名空间添加到签名前缀。我实施了“ds”修复并再次尝试。它生成以下 xml,但仍然无法验证。

更新 基于评论。尝试了以下方法:

仍然无法验证。

更新 2 现在,当我调用 CheckSignature 时出现以下错误:

似乎这是带有 sha256 的 .net 4 上的常见问题,但我在当前示例中使用的是 sha1,并且我使用的是 dotnet 核心。我也尝试过 sha256,但同样的问题仍然存在。

0 投票
0 回答
318 浏览

java - 如何从 XML 中获取哈希以登录 java

我必须创建一个具有 XML 数据的应用程序并创建用于签名的哈希并将哈希发送到 API 以获取 XML 的原始签名并在 Java 中附加 XML 的签名我怎样才能实现这一点。

同样的事情可以在.Net中通过覆盖这样的SignedXml类来完成

并使用CustomSignedXml类使用以下肉类进行签名

我怎样才能在 JAVA 中做同样的事情

0 投票
0 回答
85 浏览

java - 为什么我的 Reference(URI "") 解析为 ds:Manifest,而不是根元素,因为它应该?

我已经生成了一个具有根元素的安全标签:带有子 MetadataBindingContainer 和签名的绑定信息。当我生成 XML 时,带有 URI"" 的引用会消化所有内容,但 SignatureValue 和引用本身除外。

之后,我想通过验证引用来验证标签(以及其他一些东西,但这与问题无关)。每个参考都得到很好的验证。例如对数据对象的引用和对清单的引用。但是,一旦它尝试验证整个文档(URI="")的引用,它就会失败。DigesterOutputStream 还显示,它只指向 Manifest。所以我进入代码并注意到,当它调用类 ResolverFragment(engineResolveURI) 中的 Function: context.attr.getOwnerElement().getOwnerDocument() 时,它没有得到预期的 Document,而只是 Manifest Element。我有一种感觉,BaseURI 不正确,所以我在 XMLSignatureObject 中更改了它,我调用的是 .getSignedInfo().verifyRreferences(true)。但它也没有奏效。

另一个猜测是,需要异常,我必须以另一种方式验证清单中的引用。

任何关于如何进行的建议都非常感谢。解决我的问题会更好。