【问题标题】:Is it possible to sign a Excel VBA project including timestamp?是否可以签署包含时间戳的 Excel VBA 项目?
【发布时间】:2019-11-10 12:01:08
【问题描述】:

我使用数字签名自动在 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 ) );
    }
}

【问题讨论】:

  • Certificate.HasPrivateKey 是真的吗?好像不行就不行了。
  • 是的,它有。我使用“使私钥可导出”选项向我的 CA 请求证书。

标签: vba digital-signature epplus


【解决方案1】:

我的请求可以使用 Microsoft SignTool 而不是 EPPlus 来解决:

我使用Microsoft SignTool(来自Microsoft 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"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-23
    • 1970-01-01
    • 1970-01-01
    • 2019-02-03
    • 2018-11-12
    • 1970-01-01
    相关资源
    最近更新 更多