2

我正在开发一个 .NET包管理器,让我想到的一件事是安全性。

鉴于任何人都可能将程序集上传到存储库,我如何验证所述程序集来自受信任的来源?例如,NHibernate.dll如果它是用来自 NHForge 的人的私钥签署的,我会更加信任。为了确保这一点,我所要做的就是使用 NHForges 的公钥验证程序集签名。

现在,考虑到这一点,如何建立这种关系(这个特定的公钥属于这个特定的人)?我想出的一个想法如下:

  • 项目作者创建一个 XML 文件,其中包含有关项目和作者的信息(姓名、电子邮件等)
  • 此 XML 文件使用从文件中提取的作者私钥进行签名,该.snk文件稍后用于对程序集本身进行签名
  • 作者将此签名的 XML 文件上传到存储库,在那里对其进行检查并建立作者和公钥之间的关系

为了实现这一点(这是一个可行的想法,顺便说一句?),我需要一种访问.snk文件和读取 PK 的编程方式。.NET 中是否有这方面的内容?

4

1 回答 1

1

首先,强名称应该用作安全机制——它们只是用作程序集标识机制。对于这样的事情,我会研究 Authenticode,它是专门为验证程序集的发布者/来源而设计的(即安全性而不仅仅是身份)。

话虽如此,您概述的想法将不可行,因为您不能对 XML 文件进行强名称签名——强名称签名仅适用于 .NET 程序集。从理论上讲,您可以做的是维护每个公钥到特定发布者的某种映射(可能通过发布者注册过程或其他方式?),然后在将程序集添加到存储库之前验证程序集的强名称签名。

至于技术方面,您可以通过函数(这是非托管强命名 API 的一部分)从.snk文件中提取公钥。StrongNameGetPublicKey不过,您必须.snk自己将文件加载到内存中。

于 2010-10-01T19:55:10.453 回答