EPPlus - 如何删除数字签名

EPPlus - How to Remove Digital Signature

我想从 VBA 签名的 excel 宏文件中删除 digital signature。但是,当我查看 EPPlus 的库时,我发现 "Signature" 属性 是只读的,并且将证书设置为 null 似乎并没有将其删除,只是使文件中的签名无效:

using (ExcelPackage xlPackage = new ExcelPackage(fiNew))
{
    xlPackage.Workbook.VbaProject.Signature.Certificate = null;
    xlPackage.Save();
}

调用dispose方法也不行,保存时出错。有人知道如何在 EPPlus 中执行此操作吗?

查看 source 只需提供没有私钥的证书 - 请参阅第 137 行。

        internal void Save(ExcelVbaProject proj)
        {
            if (Certificate == null)
            {
                return;
            }

            if (Certificate.HasPrivateKey==false)    //No signature. Remove any Signature part

例如,您可以只使用 Trusted Root Certificate Authorities 中的第一个证书,它没有密钥,只要您不是 运行 根证书颁发机构或有人意外导入了 PFX ...所以我们也进行过滤:

这里有一些代码可以从 Trusted Root Certificate Authorities 商店中读取:

using (var store = new X509Store(StoreName.Root, StoreLocation.CurrentUser)) {
  store.Open(OpenFlags.ReadOnly);
  var someCertWithoutPrivateKey = 
    store.Certificates
      .Cast<X509Certificate2>()
      .Where(c => !c.HasPrivateKey)
      .FirstOrDefault();
}