我在以下情况下挣扎:

  1. 创建了XML-Message客户端,并使用Mozilla的窗口进行数字签名。Crypto.SignText。签名后,消息和签名将通过WebService(.NET)传输到服务器。到目前为止,一切都很好。

  2. 在服务器上,XML应包含在另一个可公开访问的XML文档中。签名也应发布,以便授予非申请。

问:是否有一个光滑的选项将独立的PKCS#7转换为XML-DSIG(例如,.NET框架中的功能)?

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

TNX提供帮助!

阿洛伊斯·鲍林(Alois Paulin)

有帮助吗?

解决方案

由于两种数字签名格式XML和PKCS#7的性质,因此不可能从一个转换为另一个。

在一个非常简化的解释中,签名 PKCS#7 格式包含一些称为DigestInfo的特定数据结构,其中包含数据摘要和OID(对象标识符),并已与用户的私钥联系在一起。这 XML-DSIG 格式将加密算法的最后一步(再次使用用户的私钥)应用于通过消化原始XML数据和一些特定XML-DSIG数据结构而计算出的不同数据值。因此,由于两个密码值都不相同,因此只能通过与用户的私钥签名数据来生成XML-DSIG签名,您将无法访问(因此名称私有)。

从该解释中,您第一个问题的答案是 “不,没有光滑的选择,根本不可能”.

因此,唯一的选择是直接在客户端生成XML-DSIG。使用标准JavaScript不可能,绝对不会使用Firefox的窗口。Crypto(仅生成PKCS7独立签名)。在我的公司(www.isigma.es),我们解决了通过使用一个小程序,它是数字签名行业中的常见解决方案(有许多商业和一些开源解决方案)。如果您不想要浏览器插件,那么在您的情况下,这可能不是一个选择。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top