【发布时间】: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 时间戳?
【问题讨论】:
-
如果这里没有任何接受者,请查看SuperUser 和InfoSec.SE。
-
文件是否 100% 使用 sha256 签名?我感觉它仍然是 sha1,这就是为什么它不能使用 sha256 时间戳。
标签: excel vba timestamp certificate sha256