是否可以签署包含时间戳的Excel VBA项目?

时间:2019-06-28 14:02:59

标签: vba digital-signature epplus

我使用数字签名自动在Excel文件中签名VBA代码,这在X509Certificate2和EPPlus上效果很好。 现在,我想包括一个时间戳,您知道该在哪里设置吗?

如果我在VBA编辑器-工具-数字签名中手动对代码进行签名,则该代码将带有时间戳(和反签名)。因此,当签名人的证书过期时,该证书仍然有效。但是,使用EPPlus签名时不是。 在ExcelVBASignature.cs中,它看起来像已经准备好了。.

到目前为止,这是我的操作方式:

using System;
using System.IO;
using OfficeOpenXml;
using System.Security.Cryptography.X509Certificates;
...
X509Certificate2 cert = new X509Certificate2 ( PFXfile, PFXpass, X509KeyStorageFlags.PersistKeySet );
using ( ExcelPackage xl = new ExcelPackage ( new System.IO.FileInfo ( Excelfile ) ) )
{
    using ( ExcelWorkbook wb = xl.Workbook )
    {
        wb.VbaProject.Signature.Certificate = cert;
        xl.SaveAs ( new System.IO.FileInfo ( TargetPath ) );
    }
}

1 个答案:

答案 0 :(得分:1)

可以使用Microsoft SignTool代替EPPlus解决我的请求:

我将Microsoft SignToolMicrosoft Windows 10 SDK一起使用Microsoft Office Subject Interface Packages for Digitally Signing VBA Projects

详细信息:

  1. 下载并安装SDK
    包含signtool.exe的文件夹是例如 C:\ Program Files(x86)\ Windows Kits \ 10 \ bin \ 10.0.18362.0 \ x86
    确保使用x86文件夹。
  2. 下载并解压缩SIP Package
    阅读并遵循包含的文件readme.txt
  3. 选择您喜欢的parameters and options of signtool.exe

示例:使用以下命令,使用包含私钥的证书文件对Excel文件中的VBA代码进行签名。 Excel工作簿本身不会被签名。

signtool.exe sign /f "CertificateFile.pfx" /p "P@ssw0rd" /fd "SHA256" /tr "http://rfc3161timestamp.globalsign.com/advanced" /td "SHA256" "D:\ExcelFileWithVBA.xlsm"