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();
}
我想从 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();
}