C# 以编程方式检查NuGet包中的Authenticode文件
在使用NuGet API安装NuGet软件包时,是否有方法检查其内部的dll文件 情景: 我希望c#/.net应用程序能够在运行时使用NuGet包进行自我更新。因为这显然是相当危险的,我想验证一下包是否来自我期望的源代码 问题: NuGet不支持包签名。这里有一篇文章论述了这一问题: 到目前为止我所做的:C# 以编程方式检查NuGet包中的Authenticode文件,c#,.net,nuget,signing,authenticode,C#,.net,Nuget,Signing,Authenticode,在使用NuGet API安装NuGet软件包时,是否有方法检查其内部的dll文件 情景: 我希望c#/.net应用程序能够在运行时使用NuGet包进行自我更新。因为这显然是相当危险的,我想验证一下包是否来自我期望的源代码 问题: NuGet不支持包签名。这里有一篇文章论述了这一问题: 到目前为止我所做的: 构建一个空项目 对dll文件进行签名(signtool Sign/t/a“\app.dll”) 从中创建NuGet包(NuGet spec add.dll,NuGet pack.\app.dl
public static void installPackage(string packageId, string connectionString, string path){
IPackageRepository repo = PackageRepositoryFactory.Default.CreateRepository(connectionString);
PackageManager packageManager = new PackageManager(repo, path);
packageManager.InstallPackage(packageId);
}
示例如下所示:
目前我能想到的唯一可能的解决方案是使用NuGetAPI中的下载包函数,解压缩下载的包,然后进行检查和安装。遗憾的是,我在API中找不到任何提示,说明安装过程可以在这两个步骤中完成
或者,我可以使用PGP创建分离的签名,对NuGet包本身进行签名,并使用分离的签名对NuGet包进行检查。然而,这导致了同样的问题,首先能够下载软件包
如果有任何提示,我将不胜感激!多谢各位
---更新---
我想我已经找到了一种使用NuGet和PGP签名进行包验证的方法。我正在做以下工作:
IPackageRepository repo = PackageRepositoryFactory.Default.CreateRepository(<connectionString>);
DataServicePackage package = (DataServicePackage) repo.FindPackage(packageId);
String downloadUrl = package.DownloadUrl.AbsoluteUri;
IPackageRepository repo=PackageRepositoryFactory.Default.CreateRepository();
DataServicePackage=(DataServicePackage)repo.FindPackage(packageId);
字符串downloadUrl=package.downloadUrl.AbsoluteUri;
使用(var client=new WebClient()){
client.UseDefaultCredentials=true;
client.Credentials=新网络凭据(,);
var content=client.DownloadData(downloadUrl);
使用(MemoryStream MemoryStream=新的MemoryStream(内容)){
FileStream fs=newfilestream(,FileMode.CreateNew);
memoryStream.CopyTo(fs);
fs.Close();
}
}
//初始化本地存储库
字符串路径=;
IPackageRepository localRepo=PackageRepositoryFactory.Default.CreateRepository(路径);
var packages=repo.GetPackages();
//初始化包管理器
PackageManager PackageManager=新的PackageManager(localRepo,路径);
//安装
packageManager.InstallPackage();
使用这种方法仍然可以对NuGet包中的文件进行身份验证
很高兴听到你们对这个解决方案的看法。谢谢 简单地检查软件包中的DLL可能不是最安全的选择,因为恶意文件可能会添加到软件包中,从而危害您的意图/机器。NuGet团队正在致力于允许对包进行作者签名。在这个过程中,您将有
NuGet.exe sign
和NuGet.exe verify
命令。你可以阅读更多关于它的文章。详细规格见-和
更新- NuGet团队已经完成了包签名和验证的实现。现在,您可以按照所述对包进行签名,并按照所述验证包的完整性(以及其他内容)
您可以阅读有关技术规格的信息。您的博客文章链接指向404。然而,我已经读到,有一个计划用asp.net 5实现包签名-这仍然留下了在两者之间做什么的问题。谢谢你指出这一点。我已经更新了博客帖子链接。