本文介绍如何使用 证书 在 Windows 上对 宏项目 进行数字签名。 如果还没有数字证书,则需要获取一个。
提示: 若要在自己的计算机上使用或测试宏项目,可以使用 Selfcert.exe 工具创建自己的自签名证书。 你将在下面找到更多详细信息。
获取数字证书
可以从商业证书颁发机构 (CA) 、内部安全管理员或信息技术 (IT) 专业人员获取数字证书。
若要详细了解为Microsoft产品提供服务的证书颁发机构,请参阅 Microsoft根证书计划成员的列表。
由于你创建的数字证书不是由正规的受信任证书颁发机构颁发的,因此使用这样的证书签名的宏项目称为自签名项目。 Microsoft Office 只在“证书 - 当前用户”存储中的受信任的根证书文件夹中添加了自签名证书的计算机上信任自签名证书。 这使得它非常适合在你自己的计算机或你管理的极少数计算机上进行测试或使用,但不太适合将宏项目分发给其他人。
创建自签名证书
查看个人证书存储中的证书
-
打开 Microsoft Edge。
-
在地址栏中输入 edge://settings/privacy 。
-
向下滚动到 “安全性 ”部分,然后选择“ 管理证书”。
在 Excel、PowerPoint、Publisher、Visio、Outlook 或 Word 中对 VBA 宏项目进行数字签名
-
打开包含要签名的宏项目的文件。
-
在“开发工具”选项卡上的“代码”组中,单击“Visual Basic”。
注意: 如果“开发工具”选项卡不可用:单击“文件”选项卡。 单击“选项”。 单击“自定义功能区”。 在“自定义功能区”列表中,选中“开发工具”,然后单击“确定”。
-
在 Visual Basic 中的“工具”菜单上,单击“数字签名”。
-
将出现“数字签名”对话框。
-
选择一个证书,然后单击“确定”。
注意: 如果尚未选择数字证书,或者要使用其他证书,单击“选择”。 选择一个证书,然后单击“确定”。
向签名添加时间戳
当用户运行 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 通道的最新版本中可用。
了解详细信息
注意: 本文由一个人在人工智能 (AI) 的协助下创建。