问题标签 [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.
java - 如何使用 SOAPHandlers 签署 MTOM SOAP 消息?
目前,我有两个处理程序,一个用于记录日志,一个用于签署 SOAP 消息(它本质上会篡改 SOAP 消息)。如果没有处理程序链,MTOM 会按预期工作,插入对二进制内容的引用,而不是内联 base64 二进制内容。
一旦我介绍了一个处理程序,MTOM 内容现在就被包含在内。
是否可以使用处理程序对 SOAP 消息进行签名,或者是否有更合适的方法来执行此操作?
更新 1 无法发布完整的源代码。本质上,自定义 SOAPHandler 实现。它对时间戳(在标头中)、自定义标头和 SOAP 主体执行一些基本的 XMLDsig 类型操作。然后将得到的摘要值注入到标头中的签名元素中。
关于记录器,它又是一个简单的 SOAPHandler。如果独占使用它或签名处理程序,则结果是相同的,即内联字节内容的 MTOM 消息。我取得的唯一进展是使用 MessageHandler 进行日志记录。这使我能够输出 SOAP 信封(尽管内联了字节内容)并且仍然保持 MTOM 分离。因此,这并不是真正的解决方案,而是表明 SOAP 消息的任何修改都需要在较低级别进行。这使我走上了管子的道路。
更新 2
以下是该MessageHandler
方法的示例。您可以看到原始 HTTP 转储将包含多部分消息,而实际输出内联 base64。这种实现和SOAPHandler
实现之间的唯一区别是实际的 HTTP 请求更改为单部分内联 MTOM 消息。
.net - WCF - SignedXml.CheckSignature 在签名的肥皂体上失败
我正在尝试验证签名 SOAP 消息上的签名。(只是为了解决这个问题,我完全无法控制我收到的消息)消息的正文由 Java 设备签名和发送。
SignedXml.CheckSignature 方法失败,但我确定我收到的消息是正确的。
相关位:
签名:
c# - 如何使用 silverlight 签署数据库注册表
我在 Silverlight 客户端中有我的密钥对,我想签署一个数据库注册表。这可能吗?我将生成什么样的 XML?分离的,包围的,包围的?
我尝试了一个在 Internet 上找到的示例,但它使用 System.Cryptography 命名空间来签名和创建 XMLDSig,但命名空间在 Silvelight 中无效。我不想使用 Chilkat 或 Blackbox 等其他库。
提前致谢。
java - 如何仅签署 XML 的特定部分
我正在尝试通过仅对部分 xml 进行签名来进行一些 XML 签名,但是经过大量搜索后,我无法找到解决方案。
我正在使用 java 使用 Xpath2 转换和 EXCLUSIVE 规范化对 XML 进行签名。如果我有以下 XML
并签名,我得到以下输出(真实数据替换为虚拟数据)
如果我验证签名,一切都很好,但是这里的问题是,在此之后,我在 XML 中执行了一个 XSLT,它对某些元素执行了一些更改,但没有对ns0:addr
保持不变的签名元素 ( ) 执行一些更改。即使我明确说应该只对“addr”元素进行签名,但如果我尝试对其任何父元素( 或 )执行更改,它也会payload
在msg
签名addr
失败时(根据我的理解)它不应该签名。如果我对其他元素(例如标题内的任何内容)进行更改,则签名仍然有效。
我已经测试了XPath//*[local-name()='addr']/*
表达式(ns2:data
msg
addr
我也尝试过使用不同的转换,例如 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>
它似乎在签署正确的数据,但是它也在签名中添加了一些额外的命名空间,这让我想知道这是否是问题所在,因为这些命名空间是从父元素中获取的。
有人知道如何使它不添加所有额外的名称空间吗?
cryptography - XMLDSIG 中的 KeyInfo
我相当熟悉基本的数字签名。目前正在阅读 XMLDSIG。
此页面说明如何签名
http://www.di-mgt.com.au/xmldsig.html
我无法确定页面上示例输出 XML 文件的字段中存储了什么键?
签名证书有一个公钥。但是,为什么要在签名文档中嵌入 RSA 密钥——这是谁的密钥?
xml - 如何使用 LibXML2 实现 XMLDSIG 的 XPath 转换?
我正在尝试从XMLDSIG 规范实现XPath 转换,由于一些我不会讨论的问题,我不能使用任何其他库(例如xmlsec)。
该规范声明给定一个 XPath 表达式:
XPath 表达式...为输入节点集中的每个节点计算一次。结果被转换为布尔值。如果布尔值为真,则该节点包含在输出节点集中。如果布尔值为假,则从输出节点集中省略该节点。
我知道如何解析文档、创建 XPath 上下文对象、根据文档根的上下文评估表达式以及取消链接未由表达式选择的所有元素,但这并不是标准所要求的。如何使用 XPath 上下文对象“遍历”xmlDoc,评估每个节点的 XPath 表达式并有选择地删除节点?
xml-signature - 从哪里创建 xmlSig 中的摘要?
从哪里创建 xmlSig 中的摘要?
它只是来自肥皂头的校验和/哈希?对此有什么特殊处理吗?
谢谢
c# - XMLDSig X509SerialNumber 太大而不能成为 int,XSD 验证失败
我正在尝试使用 X509 证书创建 XMLDSig。我从 MS ( http://msdn.microsoft.com/en-us/library/system.security.cryptography.xml.x509issuerserial.aspx ) 运行逐字示例,它生成下面的 XML。XML 的问题在于 X509SerialNumber 字段太长而不能成为 int,而这正是 XSD 指定它必须的。因此,当我尝试对签名进行 XSD 验证时,它会失败。
我收到的错误消息是:“ http://www.w3.org/2000/09/xmldsig#:X509SerialNumber ”元素无效 - 值“72620403068401703770138453672807553309”根据其数据类型“ http://www. w3.org/2001/XMLSchema:integer ' - 字符串 '72620403068401703770138453672807553309' 不是有效的整数值。
如何获得 X509SerialNumber 的正确值?
提前致谢!
我正在使用来自以下 URL 的 XSD:
http://www.w3.org/2000/09/xmldsig#
这是我验证 XSD 的代码:
java - Java 和 XMLDSig:没有 URI 的参考
我正在尝试使用带有 javax.xml.crypto.dsig.* 包的 XMLDSig 签署一些文本。我需要参考一些正在签名的内容。并且根据项目要求,这个引用不应该有任何URI,它的意思不是<Reference URI="">...</Reference>,而是<Reference>...</Reference>。
我还没有找到任何信息是否可能和正确,但要求说 XMLDSig 允许这样的引用,每个签名最多一个。
有人遇到过同样的问题吗?可以做些什么来使用 javax.xml.crypto.dsig.* 包生成具有此类引用的签名并且没有魔法?
据我了解,上面提到的包只允许使用 URI(或空 URI)引用一些数据,但根本不能没有任何 URI。可能是我在使用过程中遗漏了一些东西?
java - 带有 xmldsig 签名的 JAXB 编组
是否可以创建自动将数字签名添加到 xml 内容的 jaxb marshaller。
例如,如果我有一个定义的类:
我的由 marshaller 生成的 xml 看起来像:
我希望它看起来像:
我希望marshaller有办法做到这一点?如果没有,也许还有其他简单的方法来签署 xml 吗?
提前致谢