首页 > 解决方案 > 更新证书后是否需要重新编码签名 Excel 宏

问题描述

几年前,我在 Excel 中创建了 20 到 30 个表单,外加一个 Excel 插件来处理这些表单。表单和加载项包含我们使用 Go Daddy 的证书签名的 VBA 代码。证书本月到期,公司要求我帮助他们完成任何需要做的事情,以确保表单仍然有效并且不会提示企业用户信任宏。

证书将通过原始提供商 Go Daddy 进行续订。

我是否需要在每个文件中重新对 VBA 项目进行代码签名,或者代码签名是否足够聪明,可以意识到证书已经更新并且仍然可以使用它?看来,最坏的情况是,我必须打开每个 VBA 项目并重新签署代码,保存文件,然后将它们重新部署到用户在使用它们时打开表单的服务器。

我可能可以通过反复试验来解决这个问题,但我不再在公司工作,并且在下周进入办公室之前无法访问表格和证书。不过,我想做好准备,因此任何重新签名/重新部署都需要尽可能短的时间。

谢谢!

标签: excelvbacode-signingcode-signing-certificate

解决方案


您很可能不得不放弃所有文件,因为签名本质上是说“此代码已由与随附证书相关联的创建者批准,由这家值得信赖的公司证明”。而且由于证书过期,您不能继续使用同一个证书。这是为了防止有人在废弃的硬盘驱动器或其他任何地方找到旧证书并以假名签署代码。

但是,您应该做的是“时间戳”您的代码签名请求。为您的代码加时间戳有效地表示“此代码目前已由创建者批准,此后未更改”。但是,为了给 VBA 项目添加时间戳,您需要手动启用相关外部服务的使用,因此您需要 Internet。

Godaddy的这篇文章解释了这个过程:

https://www.godaddy.com/help/code-signing-microsoft-office-macros-and-visual-basic-for-applications-4779

如果您希望在证书过期后允许人们继续使用您签名的 Visual Basic® for Applicaions (VBA) 代码,请修改代码签名计算机上的注册表,以便在签名时使用以下密钥添加时间戳:

  • 创建密钥:HKEY_CURRENT_USER\Software\Microsoft\VBA\Security
  • 创建字符串:HKEY_CURRENT_USER\Software\Microsoft\VBA\Security\TimeStampURL
  • 创建 DWORD:HKEY_CURRENT_USER\Software\Microsoft\VBA\Security\TimeStampRetryCount
  • 创建 DWORD:HKEY_CURRENT_USER\Software\Microsoft\VBA\Security\TimeStampRetryDelay

将新字段设置为以下值:

之后:

编码签名文件

  1. 打开要签名的文件。
  2. 单击工具菜单,突出显示宏,然后单击 Visual Basic 编辑器。
  3. 在 Project Explorer 窗口中,选择要签名的 VBA 宏项目。
  4. 从工具菜单中,选择数字签名。
  5. 单击选择并选择您的代码签名证书.0
  6. 单击确定关闭。

此过程应允许您在证书过期后继续使用 VBA 宏。


推荐阅读