如何使用sha256签名为sha256证书添加时间戳,以便在Excel 2013中保护Excel VBAmacros代码?

这个引用来自对Excel安全设置的另一个问题的答案。 答案build议使用数字证书签名macros来解决安全问题。 在答案的最后,有人指出:“当你对macros进行数字签名时,获得一个时间戳很重要……”

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

最好是简单地保护VBA代码而不是整个电子表格,因为只要运行macros,代码就会将其输出写入电子表格,并且由于它是一个受保护的工作簿,因此代码出错并停止。 这个工作手册是作为一个演示而devise的,保存了一个只读build议,需要一个密码来修改它。 我们希望用户能够将macros写入电子表格,但不能保存具有相同名称的更改的文件。 由于将数字签名应用于VBA仅保护VBA,因此在写入电子表格时不会出现错误。

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

有一个令人眼花缭乱的registry和组策略设置,会影响时间戳,而且当我的sha256证书只用于保护VBA时,需要哪些设置才能获得sha256时间戳是相当不清楚的。 我已经尝试了所有可用的东西,看起来好像它可能会影响没有喜悦的时间戳。

尽pipe我已经能够使用较新的Office XAdES计数器签名签署电子表格并获得签名时间戳,但用于签署VBA项目的证书不会自行添加时间戳。

为其input以下registry项是必需的:HKCU \ Software \ Microsoft \ Office \ 15.0 \ Common \ Signatures

我相信键中的以下值仅影响整个工作簿XAdES签名的时间戳。

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

从实验中,我发现通过使用以下registry项可以获得保护使用时间戳签名的VBA的证书:

HKCU \ Software \ Microsoft \ VBA \ Security:TimeStampURL http://timestamp.comodoca.com/rfc3161 TimeStampRetryCount DWORD 2 TimeStampRetryDelay DWORD 5

不幸的是,这样做的时候我只能获得一个SHA1时间戳。 很快,这就像在Windows 10上没有时间戳一样。

有没有人知道如何在这种情况下获得SHA256时间戳?

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

没有内置的Office用户界面来使用此选项。 要让Office使用所有未来数字签名的时间戳服务,您需要设置这些registry项。 这些值应该在“一键”下input。 请使用以下说明:

在VBA级别创build一个安全密钥:HKEY_CURRENT_USER \ Software \ Microsoft \ VBA \ Security将一个string值项添加到名为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时间戳URL的SHA-256是http://sha256timestamp.ws.symantec.com/sha256/timestamp

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

为防止您在每次证书过期时不得不辞去软件和Visual Basic for Applications项目,某些商业authentication中心会提供时间戳服务。 如果在签名代码时使用时间戳服务,则会将代码的散列值发送到服务器以logging代码的时间戳。 使用时间戳服务时,用户的软件可以区分使用不应该被信任的过期证书签名的代码和使用在代码签名时有效但随后过期的证书签名的代码。