我使用数字签名自动在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 ) );
}
}
答案 0 :(得分:1)
可以使用Microsoft SignTool代替EPPlus解决我的请求:
我将Microsoft SignTool与Microsoft Windows 10 SDK一起使用Microsoft Office Subject Interface Packages for Digitally Signing VBA Projects。
详细信息:
示例:使用以下命令,使用包含私钥的证书文件对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"