我有一个包含已签名 .Net 程序集的 ZIP 文件,是否可以通过一种工具来签名而不是代码,而是包含这些程序集的 ZIP 文件?我希望能够在代码方面使用它,比如:
if(myzipfile.IsSignedBy(name))
{
DezipFile();
LoadAssemblies();
}
最佳答案
另一种对任意数量的任何格式的文件进行签名的标准化方法是使用单独的目录文件 (.cat)。这通常用于签署驱动程序,但也用于某些 Microsoft 发布的 ISO。
你得到什么
如何创建
为此,您需要 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/