【问题标题】:How do you timestamp a sha256 certificate with a sha256 signature to secure Excel VBA Macro code in Excel 2013?您如何使用 sha256 签名为 sha256 证书添加时间戳以保护 Excel 2013 中的 Excel VBA 宏代码?
【发布时间】:2016-11-19 20:40:07
【问题描述】:

此引用来自对另一个有关 Excel 安全设置的问题的回答。答案建议使用数字证书签署宏来解决安全问题。在答案的最后,有人指出: “当您对宏进行数字签名时,获取时间戳很重要……”

这在 Office 2013 中很棘手,原因有很多。首先,将签名附加到电子表格有两种不同的方法。它们被称为可见和不可见的签名。可以使用“文件”>“保护工作簿”>“添加数字签名”命令将可见签名应用于整个文档。要单独对 VBA 代码应用不可见的代码,请在 VBA 编辑器中使用工具 > 数字签名命令,然后选择要签名的证书。

最好只保护 VBA 代码而不是整个电子表格,因为一旦您运行宏,代码就会将其输出写入电子表格,并且由于它是受保护的工作簿,因此代码会出错并出现停下来。此工作簿被设计为演示,并以只读建议保存,需要密码才能修改。我们希望用户能够将宏写入电子表格,但不要以相同的名称保存更改后的文件。由于对 VBA 应用数字签名仅保护 VBA,因此在写入电子表格时不会出错。

问题是在保护 VBA 的证书上获取时间戳。

有一系列令人眼花缭乱的注册表和组策略设置会影响时间戳,当仅用于保护 VBA 时,需要哪些设置才能在我的 sha256 证书上获取 sha256 时间戳,这一点非常不清楚。我已经尝试了所有可用的方法,看起来好像它会影响时间戳而不高兴。

虽然我已经能够签署电子表格并使用较新的 Office XAdES 计数器签名为该签名添加时间戳,但用于签署 VBA 项目的证书本身并没有时间戳。

输入以下注册表项是必需的: HKCU\Software\Microsoft\Office\15.0\Common\Signatures

我相信密钥中的以下值只会影响整个工作簿 XAdES 签名的时间戳。

MinXAdESLevel DWORD 2 TSALocationhttp://timestamp.comodoca.com/rfc3161 XAdESLevel DWORD 5

通过实验,我发现可以通过使用以下注册表项来获得保护带有时间戳的 VBA 会签的证书:

HKCU\软件\微软\VBA\安全: 时间戳网址http://timestamp.comodoca.com/rfc3161 TimeStampRetryCount DWORD 2 TimeStampRetryDelay DWORD 5

不幸的是,我只能通过这种方式获得 SHA1 时间戳。很快,这就像在 Windows 10 上完全没有时间戳一样。

有谁知道在这种情况下如何获取 SHA256 时间戳?

【问题讨论】:

  • 如果这里没有任何接受者,请查看SuperUserInfoSec.SE
  • 文件是否 100% 使用 sha256 签名?我感觉它仍然是 sha1,这就是为什么它不能使用 sha256 时间戳。

标签: excel vba timestamp certificate sha256


【解决方案1】:

默认情况下,Office 在签名或验证代码时不使用时间戳服务。使用时间戳服务通常需要比默认数字签名过程更多的时间。若要使用时间戳服务,Office 需要通过 Internet 与证书颁发机构的时间戳服务器通信以完成操作。除非您连接到 Internet,否则您无法为数字签名添加时间戳。

没有用于使用此选项的内置 Office 用户界面。若要让 Office 使用带有所有未来数字签名的时间戳服务,您需要设置这些注册表项。 值应在 ONE 键下输入。请使用以下说明:

在 VBA 级别创建安全密钥: HKEY_CURRENT_USER\Software\Microsoft\VBA\Security 将字符串值项目添加到名为 TimeStampURL 的安全密钥中,并将值设置为下面的时间戳 URL。

SHA-1 时间戳 URL 是 timestamp.verisign.com/scripts/timstamp.dll timstamp.dll 文件名必须符合旧的 MS-DOS 命名约定)。

带有 RFC 3161 时间戳 URL 的 SHA-1 是 http://sha1timestamp.ws.symantec.com/sha1/timestamp

带有 RFC 3161 时间戳的 SHA-256 网址是 http://sha256timestamp.ws.symantec.com/sha256/timestamp

将 DWORD 值项添加到名为 TimeStampRetryCount 的安全密钥,并将值数据设置为“3”(在我的情况下,我使用 3,但您可以选择不同的数字) 将 DWORD 值项添加到名为 TimeStampRetryDelay 的安全密钥,并将值数据设置为“3”(在我的情况下,我使用 3,但您可以选择不同的数字)。 为了降低恶意用户从其公钥中获取数字证书私钥的可能性,商业获得的数字证书将在一年后到期。 Office 不允许您使用过期的证书对宏进行签名,并且还会在文件的数字签名过期时警告最终用户。最终用户将在通常的数字签名安全警告中看到警告,表明证书不再值得信赖。用户可以通过查看证书的详细信息对话框来确定证书是否已过期。

为避免您在每次证书过期时都必须为您的软件和 Visual Basic for Applications 项目重新签名,一些商业证书颁发机构提供了时间戳服务。如果您在签署代码时使用时间戳服务,则会将代码的哈希发送到服务器以记录代码的时间戳。使用时间戳服务时,用户的软件可以区分使用不应信任的过期证书签名的代码和使用在代码签名时有效但随后已过期的证书签名的代码。

【讨论】:

  • 不幸的是,我试过这个,但我仍然有这些问题:1)当我尝试你推荐的 sha256 时间戳服务器时,我收到一条错误消息“Office 无法为数字签名加上时间戳”。 2) 使用 sha1 服务器不会产生该消息,但是当我查看证书时(来自 Excel 2003 格式工作簿宏表),上面没有时间戳。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 2023-03-14
  • 1970-01-01
  • 2017-03-24
  • 1970-01-01
相关资源
最近更新 更多