数字签名 - 将 Pkcs#7 分离到 XML-DSIG

发布于 2024-08-16 07:08:47 字数 366 浏览 9 评论 0原文

我正在努力应对以下场景:

  1. XML 消息是在客户端创建的,并使用 mozilla 的 window.crypto.signText 进行数字签名。签名后,消息和签名通过 Web 服务 (.net) 传输到服务器。到目前为止,一切都很好。

  2. 在服务器上,XML 应包含在另一个可公开访问的 XML 文档中。签名也应公开,以保证不可否认性。

问:是否有一个顺利的选项可以将分离的 Pkcs#7 转换为 XML-DSIG(例如 .net 框架内的功能)?

Q2:或者是否可以在客户端创建 XML-DSIG 而无需使用外部插件?

Tnx 为您提供帮助!

阿洛伊斯·波林

I am struggling with the following scenario:

  1. an XML-message is created client-side and digitally signed using mozilla's window.crypto.signText. After signing, the message and the signature are transmitted via a webservice (.net) to the server. Everything is fine until this point.

  2. on the server, the XML shall be included in another XML-document, which is publicly accessible. The signature should be published as well in order to grant non-repudiation.

Q: Is there a smooth option to convert the detached Pkcs#7 into XML-DSIG (e.g. functionality within the .net framework)?

Q2: Or is it possible to create the XML-DSIG already client-side without using external plugins?

Tnx for your help!

Alois Paulin

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

再见回来 2024-08-23 07:08:47

由于数字签名格式 XML 和 PKCS#7 的性质,无法从一种格式转换为另一种格式。

在一个非常简单的解释中, PKCS#7 格式的签名除其他内容外还包含,一些称为 DigestInfo 的特定数据结构,其中包含数据摘要和 OID(对象标识符),并已使用用户的私钥进行加密。 XML-Dsig 格式应用加密算法的最后一步(同样使用用户的私钥)转换为通过消化原始 XML 数据和一些特定 XML-DSig 数据结构计算出的不同数据值。因此,由于两个加密值不相同,因此只能通过使用用户的私钥对数据进行签名来生成 XML-DSig 签名,而您无权访问该私钥(因此名称为 private)。

从这个解释来看,你的第一个问题的答案是“不,没有顺利的选择,根本不可能”

因此,唯一的选择是直接在客户端生成 XML-DSig。使用标准 Javascript 是不可能的,更不用说 Firefox 的 window.crypto (它只生成 PKCS7 分离签名)。在我的公司(www.isigma.es),我们通过使用小程序来解决这个问题,这是一个常见的解决方案在数字签名行业(有很多商业解决方案,也有一些开源解决方案)。如果您不需要浏览器插件,那么这可能不是您的情况的选择。

CAPICOM(您可以在 Microsoft 设置中使用的基于 Windows 的 Active/X 组件)也不生成 XML-DSig,仅生成 CMS/PKCS7。

Due to the nature of both digital signature formats XML and PKCS#7, it is not possible to convert from one to the other.

In a very simplified explanation, the signature in PKCS#7 format contains, among other stuff, some specific data structure called DigestInfo that contains the data digest and an OID (object identifier), and has been ciphered with the user's private key. The XML-Dsig format applies the final step of the cryptographic algorithm (again with the user's private key) to a different data value calculated from digesting the original XML data and some specific XML-DSig data structures. Therefore, since both ciphered values will not be the same, it is only possible to generate the XML-DSig signature by signing the data with the user's private key, which you will not have access to (thus the name private).

From that explanation, the answer to your first question is "No, there is no smooth option, it is not possible at all".

Therefore the only option is to generate the XML-DSig directly at the client side. That is not possible using standard Javascript, definitely not with Firefox's window.crypto (which only generates PKCS7 detached signatures). At my company (www.isigma.es), we solve that by using an applet, it is a common solution in the digital signature industry (there are many commercial and also some open source solutions). That may not be an option in your case, if you do not want browser plugins.

CAPICOM (the windows-based active/X component that you may use in a Microsoft setup) also does not generate XML-DSig, only CMS/PKCS7.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文