签署.NET程序集的最佳做法?

时间:2020-03-05 18:45:15  来源:igfitidea点击:

我有一个包含五个项目的解决方案,每个项目都可以编译为单独的程序集。现在,我正在对它们进行代码签名,但是我敢肯定我做错了。最佳做法是什么?

  • 用不同的密钥签名。确保密码不同
  • 用不同的密钥签名。如果需要,请使用相同的密码
  • 用相同的密钥签名
  • 完全其他的东西

基本上,我不太确定对他们执行的"签名"操作或者此处的最佳做法,因此,更笼统的讨论会很好。我只知道FxCop对我大吼,很容易通过单击"签名此程序集"复选框并使用Visual Studio(2008)生成.pfx文件来修复。

解决方案

回答

如果唯一目标是阻止FxCop朝我们大吼大叫,那么我们已找到了最佳实践。

对程序集进行签名的最佳实践完全取决于目标和需求。我们将需要更多信息,例如预期部署:

  • 供个人使用
  • 用于公司网络PC上的客户端应用程序
  • 在Web服务器上运行
  • 在SQL Server中运行
  • 通过互联网下载
  • 收缩包装以CD形式出售
  • 直接上传到控制论的大脑
  • 等等。

通常,我们使用代码签名来验证程序集是否来自特定的受信任来源并且尚未进行修改。因此,每个具有相同密钥的都可以。现在,如何确定这种信任和身份又是另一回事了。

更新:如果通过证书颁发机构获得了软件签名证书,那么在通过Web进行部署时,这对最终用户有何好处?然后,当他们下载程序集时,他们可以验证它们是否来自Domenic的Software Emporium,并且在此过程中没有被修改或者损坏。下载后,我们还需要对安装程序进行签名。这样可以防止某些浏览器显示已从未知来源获取警告的警告。

注意,我们需要支付软件签名证书的费用。我们得到的是证书颁发机构成为受信任的第三方,它可以验证身份。之所以能够成功,是因为信任网络可以追溯到其操作系统中安装的根证书的方式。有一些证书颁发机构可供选择,但是我们将要确保目标操作系统上的根证书支持它们。

回答

签名用于唯一标识程序集。有关更多详细信息,请参见如何:对程序集进行签名(Visual Studio)。

根据最佳实践,只要程序集具有不同的名称,就可以使用相同的键。

回答

这很有帮助,因为可执行文件需要一个重命名的程序集。它阻止任何人恶意替换另一个组件中的某个组件。用户也可以基于强名称授予程序集CAS权限。

我认为我们不应该分发.pfx文件,可以安全地退出程序集。

回答

有符号程序集和无符号程序集之间最明显的区别是在ClickOnce应用程序中。如果我们不签名,则用户在首次运行应用程序时会收到一个可怕的"未知发布者"警告对话框。如果我们已使用来自可信机构的证书对其进行了签名,那么他们将看到一个不那么令人恐惧的对话框。据我所知,使用自己生成的证书签名不会影响"未知发行者"警告。 Comodo的Instant SSL提供了对话框示例。

有一些微妙的差异。我们必须先对程序集进行签名,然后才能将其安装到全局程序集缓存(GAC)中,并可以由多个应用程序共享该程序集。签名是代码访问安全性(CAS)不可或者缺的一部分,但我还没有找到可以使CAS正常工作的人。我很确定GAC和CAS都可以与我们自己生成的证书一起正常工作。

回答

将PFX文件包含私钥非常重要,因为它包含私钥。

如果该密钥可供他人使用,则任何人都可以签名伪装成程序集或者程序。

要将名称与程序集相关联(在Windows看来),我们需要获取由受信任的机构签署的数字证书(PFX文件中包含姓名的部分)。

实际上,我们将获得一个新证书,但具有相同的信息。

我们必须(可能每年)支付此证书的费用,但是证书颁发机构将有效地证明存在(在将其传真或者驾驶执照副本以及家庭帐单副本传真给他们之后)。