【问题标题】:How do I sign an XLA from Excel 2016 with a timestamp?如何从 Excel 2016 签署带有时间戳的 XLA?
【发布时间】:2018-11-12 02:35:18
【问题描述】:

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

Microsoft 的文档 (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 编辑器。

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

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

  1. Developer 功能区中,单击 Macro Security,选择 Add-ins,然后选中 Require Application Add-由受信任的发布者签署的 ins。单击确定,然后关闭 Excel。 (我不是受信任的发布者,所以我故意让我的加载项被禁用。)

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

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

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

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

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

【问题讨论】:

    标签: excel code-signing xla vba


    【解决方案1】:

    我发现除了我的问题中详述的组策略更改:

    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
    

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

    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"
    

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

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

    【讨论】:

      【解决方案2】:

      根据你的timestamp server's documentation

              

                (Image Source)


      更多信息:

      【讨论】:

      • 我无法(我相信)使用 signtool 来签署 XLA?我们成功地将它与 EXE 和 DLL 的时间戳一起使用,但我很确定 XLA 必须在 Excel 中签名。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-10
      • 1970-01-01
      • 2021-04-29
      • 1970-01-01
      • 1970-01-01
      • 2013-10-04
      • 2011-01-02
      相关资源
      最近更新 更多