首页 > 解决方案 > EPPlus - 如何删除数字签名

问题描述

我想从 VBA 签名的 excel 宏文件中删除数字签名。但是,当我查看 EPPlus 的库时,我看到“签名”属性是只读的,并且将证书设置为 null 似乎不会将其删除,只会使文件中的签名无效:

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

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

标签: c#excelcertificatedigital-signatureepplus

解决方案


查看源代码,只需提供没有私钥的证书 - 请参见第 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();
}

推荐阅读