几年前,我在Excel中创建了20到30个表单以及一个Excel加载项以使用这些表单。表单和插件包含VBA代码,我们使用Go Daddy的证书对代码进行签名。该证书将于本月到期,该公司已要求我帮助他们做所有需要做的事情,以确保表单仍然有效,并且不会提示企业用户信任宏。
该证书将与原始提供者Go Daddy续签。
我是否需要在每个文件中对VBA项目进行重新编码签名,或者该代码签名足够聪明以意识到证书已被更新并且仍然可以使用?看来,在最坏的情况下,我必须打开每个VBA项目并重新签名代码,保存文件,然后将它们重新部署到用户使用它们时从中打开表单的服务器。
我可能可以通过反复试验弄清楚这一点,但是我不再在公司工作,直到下周我进入办公室之前,我将无法使用表格和证书。不过,我想做好准备,因此任何重新签名/重新部署都需要尽可能少的时间。
谢谢!
答案 0 :(得分:3)
您很有可能必须辞职所有文件,因为签名本质上是在说“此代码是由创建者批准的,并附有随附的证书,并由这家值得信赖的公司证明”。由于证书过期,因此您不能继续使用同一证书。这是为了防止某人在废弃的硬盘驱动器上或其他地方找到旧证书并用假名签名代码。
但是,您应该做的是“时间戳记”您的代码签名请求。带有时间戳记的代码有效地表明“此代码目前已由创建者批准,此后一直未更改”。但是,为了给VBA项目添加时间戳,您需要手动启用相关外部服务的使用,因此需要Internet。
Godaddy在这篇文章中对此过程进行了解释:
如果您希望允许人们在证书过期后继续使用您签名的VisualBasic®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
将新字段设置为以下值:
- TimeStampURL = http://tsa.starfieldtech.com
- TimeStampRetryCount = 3
- TimeStampRetryDelay = 2
之后:
要对签名文件进行编码
- 打开您要签名的文件。
- 单击“工具”菜单,突出显示“宏”,然后单击“ Visual Basic编辑器”。
- 在“项目资源管理器”窗口中,选择要签名的VBA宏项目。
- 从“工具”菜单中,选择“数字签名”。
- 点击选择,然后选择您的代码签名证书。0
- 单击“确定”关闭。
此过程应允许您在证书过期后继续使用VBA宏。