【问题标题】:Sign VBA (Macro's inside doc and/or docx) with Azure Key Vault (HSM)使用 Azure Key Vault (HSM) 签署 VBA(宏的内部文档和/或 docx)
【发布时间】:2021-03-30 08:55:32
【问题描述】:

我们有一个新的代码签名证书。这次是来自 GlobalSign 的 EV 代码签名证书。该证书现在仅在 Azure Key Vault 中作为 RSA-HSM 提供。

我确实设法使用 AzureSignTool 签署了 dll 和可执行文件,我还问过 this question

待办事项:

  • 在 Installshield 专业版中使用 AzureSignTool,遗憾的是这是不可能的
  • 在 Wix 工具集中使用 AzureSignTool

这个问题:

  • 签署 VBA(宏的内部文档和/或 docx)

在阅读了 VBA 签名是什么之后,我发现对 VBA 文件进行签名实际上是由 SignedCms 完成的。看了the source from EPPlus,发现原来是这样的。

除了我们没有直接的私钥外,azure key vault 有。一段代码可以访问key Vault,但只能获取RSA私钥。

也许这个问题是相关的? dotnet/runtime#24707

在 .net core 3.0 及更新版本中实现 dotnet/corefx#29219

【问题讨论】:

  • 与 VBA Installshield Premier 版本无关,有构建事件,具体是预编译事件,可以调用 AzureSignTool。 Wix 可以毫无问题地为 SignCab 和 SignMSI 调用 AzureSignTool。现在我仍然坚持使用 VBA ......难道我是唯一一个有这个问题的人!?

标签: code-signing azure-keyvault


【解决方案1】:

我最近不得不这样做,这比我预期的要痛苦。事实证明,Azure Key Vault 是目前唯一可以做到这一点的云 KMS。这是因为 VBA 宏签名需要至少一个使用 MD5 的签名,而其他 KMS 提供商(即 AWS KMS 和 Google KMS)仅支持 SHA-256、SHA-384 和 SHA-512 签名方案。 Azure Key Vault 可以做到这一点,因为它支持 RSNULL,这意味着您可以在将数据发送到 Azure 进行签名之前散列数据并应用 ASN.1 编码客户端(在您的加密服务提供商中)。

长话短说,您需要实现 CNG 接口来创建执行客户端散列、ASN.1 编码(因为它是 RSA 签名)的 KSP,然后将结果发送到 Azure 进行签名,同时指定RSNULL 作为签名算法。或者,您可以使用为您完成所有这些工作的第三方解决方案。我们使用this one,尽管可能还有其他人。

【讨论】:

  • 听起来不错,还有更多关于实现 CNG 接口的信息吗?现在我们只需购买两个证书并使用非 EV 证书来签署 VBA。将来我们可能会放弃 EV 代码签名,因为在所有情况下使用非 EV 签名就足够了。
  • 开发 KSP 是一个相当广泛的话题,但我想说一个好的起点是下载developer kit。那里应该有一个示例 KSP。
猜你喜欢
  • 2020-05-04
  • 1970-01-01
  • 1970-01-01
  • 2021-11-06
  • 1970-01-01
  • 2020-05-16
  • 1970-01-01
  • 1970-01-01
  • 2017-07-01
相关资源
最近更新 更多