问题标签 [xml-signature]

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 投票
2 回答
2962 浏览

xml - 使用 OpenSAML 和 OpenSSO 的签名验证问题

我们在服务提供商站点上使用 OpenSAML 为我们的客户提供 SSO。我们的客户(ID 提供者)最终使用 OpenSSO。当涉及到签名元素时,OpenSSO 发布的 SAML 响应略有不同,因为它不受命名空间的限制。这似乎不适用于 OpenSAML,它从该 samlResponse.getSignature()方法返回 null,因此我无法验证签名。

导致问题的 SamlReponse 的签名片段


来自另一个有效的 SAML 响应的签名片段


正如您在上面看到的,来自 OpenSSO 服务器的签名片段不包含 SAML 绑定规范中指定的命名空间限定符。

对我来说,最后一个选项是对发布的 SAMLResponse 进行一些按摩,以将命名空间添加到签名元素以使 OpenSAML 库正常工作。

任何关于如何使用 OpenSAML 库来解决这个问题的想法都非常感谢。

在此先感谢 CJ

0 投票
4 回答
15428 浏览

c# - SignedXml 检查签名返回 false

我在这里查看了有关此问题的其他帖子,但似乎都没有解决我的情况。

上周我一直在尝试验证 SAML 断言,我有 2 个客户向我发送了 SAML,但我无法验证它。

主要过程是我们得到一个 base64 编码的断言,然后我对其进行解码。将其加载到 PreserveWhitespace = true 的 XmlDocment 中。

验证方法是

我有从 Web.Config 读入的客户端证书(它存储为 base64 编码字符串) xmlelement 是签名元素,signedXml 是使用 new SignedXml(xmlElement) 创建的 SignedXml 对象

两个客户端都通过 checksignature 返回错误,但是当我使用我的证书创建自己的签名 saml 时,它将返回 true。

我在这里想念什么?

编辑:是的,两个客户端都在 Java 上,我发布了 SetSigningKeyFromKeyInfo 方法

0 投票
1 回答
343 浏览

xml - 从传入的 XML POST 到 WCF RESTful 服务中剥离 XMLDSIG 元素

伙计们,我正在构建一个 RESTful 服务,该服务通过在 XML 文档底部提供一个 XMLDSIG XML 签名来保护它。当我将此文档发送到服务器时,WCF 服务正在对 HTTP 有效负载执行 XML 反序列化方法,以便为我提供一个 C# 类。不幸的是,要正确进行这种反序列化,C# 类定义需要具有定义 XML 签名所需的所有属性,即使我只需要这些属性是为了安全。

所以,我想做的是:

  • 构建一个 WCF 服务行为,在调用前检查 XML 签名,对其进行验证,然后在常规方法调用的反序列化之前将其从 XML 中剥离。

这可能吗?如果是这样,我可以从哪里开始寻找如何做到这一点?我觉得我很接近我只是没有找到正确的 WCF 注入点。

ps 一切都是 .NET 4.0、Visual Studio 2010、IIS 7+。

0 投票
2 回答
2554 浏览

xml - 使用 dsig:Signature 和 TLS 客户端证书签署 XML 消息的区别

我意识到这个问题可能有点含糊,或者我可能使用了不正确的术语,那是因为我正试图掌握这些东西:)。

我需要使用 dsig:Signature 部分来实现 XML 消息的数字签名。我想我理解这个过程;我将使用私钥对其进行签名,这将向收件人保证是我发送了消息并且没有人篡改它。

我对这与实施 TLS 客户端证书不同但目标是一样的吗?(因为 TLS 是传输级别的,对吗?)实施客户端证书会更容易吗?这个比那个好吗?

非常感谢您的回复,

马汀

更新1:

我认为另一个区别是使用 TLS 客户端证书将加密整个消息,而使用数字签名,消息本身将是纯文本,包含签名部分。

0 投票
1 回答
496 浏览

java - 使用 IBM SDK 6.0 生成 XML 签名

我在尝试使用 IBM 的 JRE 6.0 签署 SAML2 断言时遇到了一个有趣的问题。如果我在 Sun JDK 下运行代码,它会正确签署断言并验证签名。如果我在 IBM JRE 下运行完全相同的代码,则会正确创建断言,但不会验证签名。同样,这是相同的代码,事实上,因为它是从 Jetty 运行的,它也是完全相同的 Jetty 配置和 WAR 文件。我有两个 Jetty 实例在具有不同 JRE 的不同端口上运行,但指向同一个 Jetty 主页。在 Sun JRE 下生成的签名有效,但在 IBM JRE 下生成的签名无效。坦率地说,我很难过,我已经没有东西可以尝试了,所以任何建议都会有所帮助。

0 投票
2 回答
7501 浏览

java - 手动验证 XML 签名

我可以成功地进行手动引用验证(规范化每个引用的元素 --> SHA1 --> Base64 --> 检查它是否与 DigestValue 内容相同),但我在验证 SignatureValue 时失败了。这是要规范化和散列的 SignedInfo:

在删除标签之间的所有空格(因此将整个元素放在一行上)之后,我获得了这个 sha1 摘要(在 Base64 中):

6l26iBH7il/yrCQW6eEfv/VqAVo=

现在我希望在解密 SignatureValue 内容后找到相同的摘要,但我得到了一个不同且更长的值:

MCEwCQYFKw4DAhoFAAQU3M24VwKG02yUu6jlEH+u6R4N8Ig=

这是一些用于解密的java代码:

让我很困惑的是两个摘要的大小不同,但当然我还需要从两个计算中获得完全相同的值。有什么建议么?谢谢你。

0 投票
2 回答
5005 浏览

java - 使用 xml 中的公钥进行 javax.xml.crypto.dsig 验证

使用 javax.xml.crypto.dsig,如何在不指定公钥的情况下解组和验证 XMLSignature?公钥似乎在签名的 xml 中,但我不知道如何获取它。

据我所知,有必要将 KeySelector 而不是 Key 传递给 DOMValidateContext。但是,我不知道如何实现 KeySelector。

这是我发现的关于如何实现 KeySelector 的唯一示例:http: //download.oracle.com/javase/6/docs/technotes/guides/security/xmldsig/XMLDigitalSignature.html

不幸的是,它不起作用。在该实现中,它执行以下操作但总是失败,因为没有 KeyValue 元素(似乎它们是 org.jcp.xml.dsig.internal.dom.DOMX509Data 元素而不是 KeyValue 元素,它们没有办法获取他们的钥匙)。

那么,有没有办法做到这一点?我希望能够验证 xml 文件的签名而不必拥有公钥。我只想从 xml 中获取公钥。

0 投票
1 回答
2011 浏览

xml - 可以用这种方式对 XML 文件进行签名吗?

我需要 XML 文件的校验和,以验证没有对文件进行任何更改。

一旦我创建了 MD5 校验和,就可以将 MD5 校验和“嵌入”到同一个文件中。我猜不是,但也许可以不基于文件的前 X 个字符来制作部分校验和。

非常感谢你...

0 投票
8 回答
23062 浏览

java - 如何在 Java 中生成没有空格和换行符的 XML 签名?

我与巴西的“ Nota Fiscal Eletronica ”项目合作,他们在其中定义了一种标准的方式来签署 XML 文档。

最近,他们开始要求标签之间绝对不能有空格,包括签名标签(*)。

我们碰巧使用了 apache 的XMLSignature,但我似乎无法生成未缩进的签名。

如果我在签名后删除空格,签名就会被破坏。

我也无法更改规范化器/转换器集,因为它们是预定义的。

我在 XMLSignature API 中找不到用于控制缩进或空格的选项或参数。

下面是代码:

下面是生成的签名(片段):

注意(不需要的)换行符。

任何帮助将不胜感激。

提前非常感谢。

(*) 澄清:新规则禁止元素标签之间的空格(或任何其他文本)。例如,这将是允许的:

虽然这是被禁止的:

因为在后一种情况下,空格(换行符)位于两个标签之间,或者换句话说,位于仅元素标签内。

0 投票
1 回答
2884 浏览

apache - XMLSec:签名有什么问题?(“对 URI 的引用没有 XMLSignatureInput”)

我正在使用 apache-santuario 1.4.4 生成此签名消息:

当我将它发送到我正在使用的服务时,它会回复:

我用谷歌搜索了很多,但几乎没有发现任何关于这个错误的信息。是否声明了引用错误?有什么问题?任何想法将不胜感激。

提前致谢。