1

我在以下情况下苦苦挣扎:

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

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

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

Q2:或者是否可以在不使用外部插件的情况下在客户端创建 XML-DSIG?

Tnx 为您提供帮助!

阿洛伊斯·保林

4

1 回答 1

4

由于数字签名格式 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。

于 2010-03-24T00:44:25.153 回答