gpt4 book ai didi

xml - 如何使用客户端的私钥在服务器上对 XML 进行外部签名(仅发送哈希,而不是完整的 xml)

转载 作者:行者123 更新时间:2023-12-05 07:17:54 25 4
gpt4 key购买 nike

我需要在服务器上生成 XML,但在客户端使用客户端私钥对其进行签名。但是,出于带宽消耗和一些安全问题,我们不想将整个 xml 从服务器发送到客户端进行签名。我们只想将 XML 的散列/摘要发送给客户端。事件的顺序将如下所示:

  • 服务器生成 XML 摘要并将摘要发送给客户端
  • 客户端用客户端的私钥签署摘要/散列并将其发送到服务器
  • 服务器将签名的哈希与 XML 文件合并以获得签名的 XML。

以前,我使用客户端私钥对服务器上的 pdf 签名进行了类似的解耦——为此我使用了 itext 库。但是,发现很难使用 Oracles XML 签名库对 XML 签名做类似的事情。可用于对 xml 进行签名的众所周知的 API 似乎不提供这种在外部对 xml 进行签名的功能(将散列和签名部分解耦)。所以我的问题是,如何使用客户端的私钥(仅发送哈希,而不是完整的 xml)在服务器上对 XML 进行外部签名?

最佳答案

您可以自己构建它,但我建议您像处理 PDF 一样使用库(XML 签名非常复杂)

检查 esig-dss和这个样本 SignXmlXadesBTest.java

 //SERVER SIDE.
// Get the SignedInfo XML segment that need to be signed.
ToBeSigned dataToSign = service.getDataToSign(toSignDocument, parameters);

//CLIENT SIDE
// This function obtains the signature value for signed information using the
// private key and specified algorithm
SignatureValue signatureValue = signingToken.sign(dataToSign, parameters.getDigestAlgorithm(), privateKey);

// SERVER SIDE
// We invoke the service to sign the document with the signature value obtained in
// the previous step.
DSSDocument signedDocument = service.signDocument(toSignDocument, parameters, signatureValue);

在客户端,signingToken.sign() 只是用私钥对服务器准备的摘要(字节数组)进行签名。如果您不使用 java,则不必使用 DSS,因为它是一种在大多数编程语言中都可用的简单加密操作

另请注意,DSS 可用作库或具有 REST 或 SOAP 接口(interface)的服务器

关于xml - 如何使用客户端的私钥在服务器上对 XML 进行外部签名(仅发送哈希,而不是完整的 xml),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58602439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com