【问题标题】:EPPlus - How to Remove Digital SignatureEPPlus - 如何删除数字签名
【发布时间】:2020-07-31 06:01:02
【问题描述】:

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

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

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

【问题讨论】:

  • 你试过xlPackage.Workbook.VbaProject.Signature = null吗?
  • @DanielFisherlennybacon 该代码将无法构建(EPPlus 版本 4)。签名只有get方法,没有setter。
  • 查看sources 只需提供没有私钥的证书 - 参见第 137 行。

标签: c# excel certificate digital-signature epplus


【解决方案1】:

查看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();
}

【讨论】:

  • 有趣的是,“HasPrivateKey”属性只有一个 get 方法,所以您需要创建一个完全不同的证书而不需要私钥,然后以某种方式将其分发给您的应用程序,并签署 VBA 文件有了这个新证书,可能类似于下面的like the following,这似乎很重,但我想理论上可行,我必须做一些测试看看这是否真的有效,但还是太糟糕了这是一种更简单的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-12
  • 2015-05-16
  • 2011-08-12
  • 2022-06-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多