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

java - 检查 XML 签名 +ECC 算法

我在当前的 Android 项目中达到了一个点,需要使用 .pdf 文件验证 XML 签名(pdf 文件在 XMl 文件中签名),我遇到了一个主要问题。它与绝对不能使用 iaik 库有关:

签名是使用标准 java 库无法处理的 ECC 算法(椭圆曲线)制作的。有谁知道处理这些签名的方法?

所以我正在寻找的是另一个 libarie 或 javax-Problem 的解决方法。

非常感谢您的任何想法!

附加信息:

  • 我知道 Apache Santuario,但我不能使用它,因为它包含将添加到 javax 的类,而 DalvikVM 不允许这样做。
  • 我知道使用 iaik 很容易做到这一点,但由于许可证问题(+ javax 问题),它不是一个选项。
  • 我没有发布任何代码,因为它不能按照我的方式完成,我完全被卡住了,我需要从头开始的新想法:/
0 投票
2 回答
7166 浏览

java - Bouncycastle XmlSignatureFactory NoSuchAlgorithmException

我在使用 BouncyCastle 检查 XMLSignature 以验证使用 ECDSA 的签名时遇到问题。

以下是相关的代码行:

在最后一行,抛出以下异常:

如果我将线路更改为

我明白了

任何人有任何想法是什么原因造成的?

0 投票
1 回答
172 浏览

java - 带有用户输入的 xsd 到 xml 工具

有人可以建议我在 java 中执行以下操作的工具或转换器(1)用户将向 Tool 提供 XSD 文件。(2) 工具将解释 XSD 并显示一个屏幕以允许数据输入(根据 XSD 中定义的类型)。(3) 用户将输入值并单击“生成 XML”。(4) 工具将使用用户输入的值生成符合 XSD 定义的 XML。

0 投票
1 回答
2310 浏览

java - 不支持的 SignatureMethod 算法,但该算法被 BC-Provider 列为可用服务

为了简短起见,我的问题如下:

我在函数的开头添加了 BC-Provider:

当我列出所有服务时

该列表包含“RIPEMD160WITHECDSA”

在此代码段的最后一行:

我收到一条消息异常:

不支持的 SignatureMethod 算法:http ://www.w3.org/2007/05/xmldsig-more#ecdsa-ripemd160

这意味着什么?RIPEMD160WITHECDSA 与此 URL 指定的算法有什么区别?或者 url 只是没有映射到这个算法名?

这是堆栈跟踪:

0 投票
1 回答
524 浏览

java - 从 pkcs12 密钥库 usong 别名获取签名证书的简单方法

谁能告诉我 xades4j 中是否有一种简单的方法可以使用他的别名从 pkcs12 获取签名证书?

0 投票
2 回答
1265 浏览

c# - 如何使用独立于 SignedXml 类的 XmlDsigEnvelopedSignatureTransform

Internet 上的所有示例都显示了 XmlDsigEnvelopedSignatureTransform 类作为 SignedXml 类的一部分的用法。

我想自己使用这个类。只需给它一个 nodeList 就可以得到没有签名节点的结果。

但是输出 nodeList 仍然包含我想摆脱的 ds:Signature 节点。

这样做的正确方法是什么?非常感谢您的帮助。

0 投票
1 回答
672 浏览

x509certificate - 如何使用 Web 应用程序的智能卡中包含的私钥对 XML 进行签名?

我正在寻找一种解决方案,使用包含在 Web 应用程序的 USB 令牌(智能卡等)中的不可导出的私钥(这需要用户输入通知密码/秘密密码以使用它创建哈希)来签署 XML。我已经制作了 ac# 类库来做到这一点,但显然代码是在服务器端执行的,所以我无法通过互联网访问客户端的 usbtoken/智能卡,除非它插入服务器 pc(所以我的解决方案可能是安装在我客户的本地网络中,并且 usbtoken 插入服务器的 usb。它今天的工作方式就是这样,但我想更改它以便客户在他的机器上使用它的令牌)

我已经使用 SignedXml、X509Certificates 和其他类创建了一个代码来实现这一点,但我正在寻找 silverlight 类库中的等价物来封装所有这些东西并在客户端执行它,但不幸的是 SignedXml 不能在 Silverlight 中使用(不存在..)。

我已经成功地创建了一个 ActiveX,但我的解决方案现在只能在 Internet Explorer/Windows 中运行,并且由于我的业务逻辑,它不是很容易维护。

任何人都可以帮助我吗?任何建议都非常受欢迎。

如果我可以将我的 activex 解决方案移植到 silverlight,或者如果可以使用可以在其他浏览器/操作系统中执行的其他 MS 技术来做到这一点。

抱歉英语不好,不是母语人士。谢谢你。

0 投票
3 回答
1475 浏览

xml - XSLT 转换更改名称空间

我有以下 XML(大部分数据是虚拟的)

我要做的就是将msg元素的名称(为newmsg)和默认命名空间更改为http://someaddress.com/m2. 其他一切都应保持原样。我能得到的最接近的是这个 xslt

我正在使用 xalan 进行测试,这是运行上述程序时得到的输出 xml

这有两个主要问题:

  1. 命名空间只是从输出中ds消失了,我不知道为什么。
  2. 第二个问题是它从 中删除了xsi命名空间,calcnode并且鉴于calcnode是用于计算(和验证)签名的节点(位于该部分下方),这样的更改将使我无法理解签名的验证。

我已经尝试了几次不同的 xslt 迭代,但没有太多结果。任何人都可以对这种情况有所了解吗?

0 投票
2 回答
6063 浏览

java - 如何仅签署 XML 的特定部分

我正在尝试通过仅对部分 xml 进行签名来进行一些 XML 签名,但是经过大量搜索后,我无法找到解决方案。

我正在使用 java 使用 Xpath2 转换和 EXCLUSIVE 规范化对 XML 进行签名。如果我有以下 XML

并签名,我得到以下输出(真实数据替换为虚拟数据)

如果我验证签名,一切都很好,但是这里的问题是,在此之后,我在 XML 中执行了一个 XSLT,它对某些元素执行了一些更改,但没有对ns0:addr保持不变的签名元素 ( ) 执行一些更改。即使我明确说应该只对“addr”元素进行签名,但如果我尝试对其任何父元素( 或 )执行更改,它也会payloadmsg签名addr失败时(根据我的理解)它不应该签名。如果我对其他元素(例如标题内的任何内容)进行更改,则签名仍然有效。

我已经测试了XPath//*[local-name()='addr']/*表达式(ns2:datamsgaddr

我也尝试过使用不同的转换,例如 UNION 但这根本不起作用。

有人知道问题可能是什么吗?在 Java 中,有没有什么方法可以在为调试目的对 XML 进行签名时准确查看正在签名的内容?

编辑:

稍后运行的 xslt 将执行诸如将命名空间从 ns0:addr 元素移动到根元素 (msg) 之类的事情,并且它将主元素名称和命名空间从 msg 更改为 newmsg(以及不同的默认命名空间),但保留签名数据 ( ns2:data) 完好无损。

用于签名的代码或多或少是这里提到的代码http://docs.oracle.com/javase/7/docs/technotes/guides/security/xmldsig/XMLDigitalSignature.html

除了我使用 XPATH2 转换而不是 ENVELOPE 转换:

而且我使用的是 EXCLUSIVE 而不是 ENVELOPED

编辑2:

我已经设法对 xml 签名过程进行了更精细的调试,并得到了以下结果:

FINER: Pre-digested input: 21-Sep-2012 10:51:39 org.jcp.xml.dsig.internal.DigesterOutputStream write FINER: <ns2:data xmlns="http://someaddress/ad/m1" xmlns:ns0="http://someaddres/ad/m3" xmlns:ns1="http://someotheraddres/ad/m2" xmlns:ns2="http://someaddres/ad/m3"> <ns2:name>somevalue</ns2:name> <ns2:value>354</ns2:value> </ns2:data>

它似乎在签署正确的数据,但是它也在签名中添加了一些额外的命名空间,这让我想知道这是否是问题所在,因为这些命名空间是从父元素中获取的。

有人知道如何使它不添加所有额外的名称空间吗?

0 投票
2 回答
8810 浏览

java - 验证 XML 签名 JAVA

是否可以验证以下 XML 文档:

问题是当我运行我的代码时,出现此错误

我已使用相同的代码成功验证了以下 XML:

这两个 XML 签名有什么区别,为什么它在第二个 XML 示例上而不是在第一个?