如何使用时间戳从 Excel 2016 签署 XLA?

dav*_*_uk 5 excel vba code-signing xla

我正在努力从 Excel 2016 签署带有时间戳的 XLA 。这很重要,因为如果没有时间戳,当使用的代码签名证书过期时,签名就会失效。不幸的是,默认情况下 Excel 不会对签名应用时间戳。

微软的文档(https://docs.microsoft.com/en-us/deployoffice/security/use-digital-signatures-with-office)指出:

要将时间戳功能与数字签名一起使用,您必须完成以下任务:

  • 设置符合 RFC 3161 的时间戳服务器

  • 使用组策略设置“指定服务器名称”来输入时间戳服务器在网络上的位置。

我的证书颁发者 Comodo 声明他们的时间戳服务器 ( http://timestamp.comodoca.com) 支持 RFC 3161 ( https://support.comodo.com/index.php?/Knowledgebase/Article/View/68/0/time-stamping-server )。

我从https://go.microsoft.com/fwlink/p/?LinkID=626001下载并安装了 Office 2016 管理模板文件 (ADMX/ADML)以应用组策略设置。在本地组策略编辑器中,我可以访问 用户配置、管理模板、Microsoft Office 2016、安全设置、数字签名,其中找到了相关的组策略设置。

我最初设置了以下内容:

  • 将时间戳服务器名称指定http://timestamp.comodoca.com
  • 将时间戳服务器超时设置20

...然后当这些不起作用(见下文)时,我还设置:

  • 指定数字签名生成最低XAdES级别,以XAdES-T
  • 请求的XAdES级别签名生成XAdES-T

...因为 XAdES-T “向签名的 XML-DSig 和 XAdES-EPES 部分添加时间戳,这有助于防止证书过期” - 这听起来像我需要的。

我正在使用“工具”菜单中的“数字签名”登录 VBA 编辑器。

但是,当我检查签名时,我仍然看不到 timestamp

我正在检查签名如下(我不知道更简单的方法):

  1. Developer功能区中,单击Macro Security,选择Add-ins,然后选中Require Application Add-ins to be signed by Trusted Publisher。单击“确定”,然后关闭 Excel。(我不是值得信赖的发布者,所以我故意导致我的加载项被禁用。)

  2. 重新启动 Excel,并创建一个空工作簿。(我的加载项配置为自动加载。)由于第 1 步,显示安全警告。

Excel 安全警告

  1. 根据提示单击以获取更多详细信息,然后从“启用内容”菜单中选择“高级选项” 。

文件信息

  1. Microsoft Office 安全选项对话框中,向下滚动到已签名的加载项,然后单击显示签名详细信息。这将打开数字签名详细信息对话框,其中显示签名时间: Not available,表示缺少时间戳:

没有签约时间

我的理解是带有时间戳的签名会在此处显示,例如

带时间戳的签名

...但我一直无法用我的 XLA 实现这一点。

dav*_*_uk 4

我发现除了我的问题中详细说明的组策略更改之外:

User Configuration\Administrative Templates\Microsoft Office 2016\Security Settings\Digital Signatures\

组策略编辑器

时间戳服务器名称

...还需要设置一些我之前找到的注册表项,但它们不能单独工作:

reg add "HKCU\Software\Microsoft\VBA\Security" /v "TimeStampURL" /f /d "http://timestamp.comodoca.com/authenticode"
reg add "HKCU\Software\Microsoft\VBA\Security" /v "TimeStampRetryCount" /f /t REG_DWORD /d 2
reg add "HKCU\Software\Microsoft\VBA\Security" /v "TimeStampRetryDelay" /f /t REG_DWORD /d 1
Run Code Online (Sandbox Code Playgroud)

另请注意,组策略更改只是为了编辑注册表而出现,因此可以进行上述注册表更改,并且:

reg add "HKCU\Software\Policies\Microsoft\office\16.0\common\signatures" /v tsalocation /f /d "http://timestamp.comodoca.com"
reg add "HKCU\Software\Policies\Microsoft\office\12.0\common\signatures" /v tsalocation /f /d "http://timestamp.comodoca.com"
reg add "HKCU\Software\Policies\Microsoft\office\14.0\common\signatures" /v tsalocation /f /d "http://timestamp.comodoca.com"
reg add "HKCU\Software\Policies\Microsoft\office\15.0\common\signatures" /v tsalocation /f /d "http://timestamp.comodoca.com"
Run Code Online (Sandbox Code Playgroud)

(也支持一些较旧的 Excel 版本)。

上面的设置适用于我的证书颁发者 Comodo。所有对timestamp.comodoca.com 的引用都需要适当更新。