对 VBA 宏项目进行数字签名

应用对象
Microsoft 365 专属 Excel Microsoft 365 专属 Word Microsoft 365 专属 Outlook Microsoft 365 专属 PowerPoint Microsoft 365 专属 Publisher Excel 2024 Outlook 2024 PowerPoint 2024 Excel 2021 Word 2021 Outlook 2021 PowerPoint 2021 Publisher 2021 Visio Professional 2021 Visio Standard 2021 Excel 2019 Word 2019 Outlook 2019 PowerPoint 2019 Publisher 2019 Visio Professional 2019 Visio Standard 2019 Excel 2016 Word 2016 Outlook 2016 PowerPoint 2016 Publisher 2016 Visio 专业版 2016 Visio 标准版 2016 Visio 专业版 2013

本文介绍如何使用证书在 Windows 上对宏项目进行数字签名。 如果还没有数字证书,则需要获取一个。

提示

若要在自己的计算机上使用或测试宏项目,可以使用 Selfcert.exe 工具创建自己的自签名证书。 您将在下面找到更多详细信息。

获取数字证书

可以从商业证书颁发机构 (CA) 、内部安全管理员或信息技术 (IT) 专业人员处获取数字证书。

若要了解有关为 Microsoft 产品提供服务的证书颁发机构的详细信息,请参阅 Microsoft 根证书程序成员列表。

使用自签名证书

由于你创建的数字证书不是由正规的受信任证书颁发机构颁发的,因此使用这样的证书签名的宏项目称为自签名项目。 Microsoft Office 仅在将自签名证书添加到 “证书 - 当前用户”存储中的受信任根证书文件夹的计算机上信任自签名证书。 这使得它适合在您自己的机器或您管理的极少数机器上测试或使用,但不太适合将宏项目分发给其他人。

创建自签名证书

你正在使用什么版本的 Windows?

Windows 10 或更高版本

  1. 转到 C:\Program Files (x86) \Microsoft Office\root\Office16

    提示

    如果在此文件夹中找不到它,请尝试 C:\Program Files\Microsoft Office\root\Office16

  2. 单击“SelfCert.exe”。 将出现“创建数字证书”框。

  3. “您的证书名称”框中,为证书键入一个描述性名称。

  4. 单击“确定”。

  5. 在出现“SelfCert 成功”消息时,单击“确定”

Windows 8

  1. 转到 C:\Program Files\Microsoft Office\<Office version>\
  2. 单击“SelfCert.exe”。 将出现“创建数字证书”框。
  3. “您的证书名称”框中,为证书键入一个描述性名称。
  4. 单击“确定”。
  5. 在出现“SelfCert 成功”消息时,单击“确定”

在个人证书存储中查看证书

  1. 打开 Microsoft Edge。
  2. 在地址栏中输入 edge://settings/privacy
  3. 向下滚动到 “安全 ”部分,然后选择“ 管理证书”

在 Excel、PowerPoint、Publisher、Visio、Outlook 或 Word 中对 VBA 宏项目进行数字签名

  1. 打开包含要签名的宏项目的文件。

  2. “开发工具”选项卡上的“代码”组中,单击“Visual Basic”

    注意

    如果“开发人员”选项卡不可用:单击“ 文件 ”选项卡。单击 选项。 单击“自定义功能区”。 在“自定义功能区”列表中,选中“开发工具”,然后单击“确定”

  3. 在 Visual Basic 中的“工具”菜单上,单击“数字签名”

  4. 将出现“数字签名”对话框。

  5. 选择一个证书,然后单击“确定”

    注意

    如果尚未选择数字证书,或者要使用其他证书,单击“选择”。 选择一个证书,然后单击“确定”

在签名中添加时间戳

当用户运行 VBA 宏时,Office 将检查签名及其签名时使用的证书。 向签名添加时间戳意味着,即使在证书过期后,只要证书未被吊销,宏仍将被视为已签名。 这可以减少对用户的服务中断。

仅仅过期的证书仍可用于验证代码,只是不能用于对新代码进行签名。

若要添加时间戳,需要向注册表添加三个键。

警告

编辑注册表不当可能严重损坏系统。 在更改注册表之前,我们建议你备份计算机上的任何有价值的数据。

类型 说明
HKCU\Software\Microsoft\VBA\Security\TimeStampURL REG_SZ 首选时间戳服务器的 URL。 (必需)
HKCU\Software\Microsoft\VBA\Security\TimeStampRetryCount REG_DWORD Visual Basic 编辑器在失败前尝试连接到时间戳服务器的次数。 (可选 - 如果未设置此设置,Visual Basic 编辑器将仅尝试联系服务器一次)
HKCU\Software\Microsoft\VBA\Security\TimeStampRetryDelay REG_DWORD (的秒数(以毫秒为单位) Visual Basic 编辑器将在重试连接到时间戳服务器之间等待。 (可选 - 如果未设置此选项,则任何重试之间都不会有任何延迟)

添加有效的 TimeStampURL 条目后,只要对宏进行数字签名,Visual Basic 编辑器就会自动添加时间戳。

其他说明

  • 建议只有在解决方案经过测试并准备好分发 才对宏进行签名:当已签名宏项目中的代码以任何方式更改时, 其数字签名将被删除。 但是,如果你具有以前用于登录计算机上项目的有效数字证书,则当你保存宏项目时会自动对其重新进行签名。
  • 防止用户意外更改您的宏项目并使您的签名失效的一种方法是在应用签名之前锁定宏项目。 您的数字签名可确保项目自您签名以来没有被篡改,但并不能证明您编写了该项目。 即使您锁定了宏项目,其他用户仍可以用另一个签名替换您的签名。 公司管理员还可以对模板和加载项重新签名,以确保只有已批准的内容才能在公司计算机上运行。
  • 如果创建将代码添加到宏项目的加载项,则代码应当确定该项目是否已经过数字签名,并在用户继续操作之前告知用户更改已签名项目的后果。
  • 由于签名中支持的哈希算法的局限性,使用商业证书的用户可能会遇到阻塞。 你可以添加一个 DWORD 注册表键值 V1HashEnhanced ,以在 HKCU\SOFTWARE\Microsoft\VBA\Security 下选择另一个哈希算法,其值算法规则 (1 到 SHA1、2 到 SHA256、3 到 SHA384、4 到 SHA512,其他规则到 MD5) 。 此设置在最新版本的 CC 渠道中可用。

了解详细信息

启用或禁用 Microsoft 365 文件中的宏

注意

本文由一个人在人工智能 (AI) 的协助下创建。