c# - 如何像签署程序集一样签署 ZIP 文件?

标签 c# .net assemblies signing

我有一个包含已签名 .Net 程序集的 ZIP 文件,是否可以通过一种工具来签名而不是代码,而是包含这些程序集的 ZIP 文件?我希望能够在代码方面使用它,比如:

if(myzipfile.IsSignedBy(name))
{
    DezipFile();
    LoadAssemblies();
}

最佳答案

另一种对任意数量的任何格式的文件进行签名的标准化方法是使用单独的目录文件 (.cat)。这通常用于签署驱动程序,但也用于某些 Microsoft 发布的 ISO。

你得到什么

enter image description here

如何创建

为此,您需要 Powershell 和一个文件(或文件目录)进行签名。

假设您要签名的文件名为 AZipFile.zip。运行以下

New-FileCatalog -Path AZipFile.zip -CatalogFilePath myCatalog.cat -CatalogVersion 2.0

这将创建一个没有签名的目录文件。 Image

运行以下命令添加签名。需要时间戳服务器,以便签名证书过期后签名仍然有效。将 Cert:\CurrentUser\My\18daf8ffb3dc9d84903a9eb65fb8a1970ceb7139 替换为您的证书路径

Set-AuthenticodeSignature -FilePath myCatalog.cat -Certificate(Get-Item Cert:\CurrentUser\My\18daf8ffb3dc9d84903a9eb65fb8a1970ceb7139)-TimestampServer http://timestamp.comodoca.com

现在目录文件显示了一个有效的签名。 Image

如何验证

通过双击 Windows 上的目录文件,您可以查看签名是否有效,以及文件列表及其哈希值。但是,GUI 不会帮助您验证文件。为此,您需要另一个 powershell 命令。

Test-FileCatalog -CatalogFilePath myCatalog.cat -Path AZipFile.zip

如果目录下所有文件的签名都有效,则返回Valid

关于c# - 如何像签署程序集一样签署 ZIP 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16651959/

相关文章:

c# - 从 C# 调用存储过程时出错

c# - 如何获取 Controller 的 POST 操作方法?

.net - 如何在 C# 中检索程序集的版本?

.net - 使用 StructureMap 配置配置文件

c# - 如何在 C# 中从内存启动程序?

c# - 引用非托管程序集

c# - 对已实例化的对象使用 using 语句

c# - 嵌套循环的更快替代方案?

c# - 从 TableAdapter 获取@@IDENTITY

c# - 在属性 == true 中查找 List 的总和?