.NET程序集签名的最佳实践是什么?

46

我有一个解决方案,包含五个项目,每个项目都编译为单独的程序集。目前我正在对它们进行代码签名,但我相信我在做错了。这里最佳实践是什么?

  • 使用不同的密钥对每个项目进行签名;确保密码不同
  • 使用不同的密钥对每个项目进行签名;如果需要可以使用相同的密码
  • 使用相同的密钥对每个项目进行签名
  • 完全不同的做法

基本上,我不太确定“签名”对它们有何影响,或者在这里的最佳做法是什么,因此更普遍的讨论会很有帮助。我真正知道的只有FxCop向我发出警告,通过在 Visual Studio (2008) 中点击“签署此程序集”复选框并生成 .pfx 文件轻松修复该问题。


这个回答解决了你的问题吗?数字签名与强命名程序集有什么关系? - undefined
5个回答

44

如果您的唯一目标是阻止FxCop对您发出警告,那么您已经找到了最佳实践。

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

  • 个人使用
  • 作为客户端应用程序在企业网络PC上使用
  • 在Web服务器上运行
  • 在SQL Server中运行
  • 通过互联网下载
  • 在收缩包装的CD上销售
  • 直接上传到机器人大脑中
  • 等等。

通常,您使用代码签名来验证程序集来自特定可信源且未被修改。因此,所有程序集可以使用同一密钥。现在如何确定信任和身份是另一个故事。

更新:当您通过Web进行部署时,这将使您的最终用户受益,如果您从证书颁发机构获得了软件签名证书。然后,当他们下载您的程序集时,他们可以验证它们来自Domenic's Software Emporium,并且它们在传输过程中没有被修改或损坏。您还需要在下载安装程序时对其进行签名。这可以防止某些浏览器显示的警告,表明它是从未知来源获取的。

请注意,您将支付软件签名证书的费用。您获得的是证书颁发机构成为第三方信任机构,验证您就是您所说的那个人。这起作用是因为信任网络追溯到安装在其操作系统中的根证书。有几个证书颁发机构可供选择,但您需要确保它们受目标操作系统上的根证书的支持。


8
签名和非签名程序集最明显的区别在于ClickOnce应用程序。如果不进行签名,用户第一次运行应用程序时会出现恐怖的“未知发布者”警告对话框。如果您使用来自可信任机构的证书进行签名,则他们将看到一个较少恐怖的对话框。据我所知,使用自己生成的证书进行签名不会影响“未知发布者”警告。Comodo的Instant SSL提供了对话框示例。
还有一些微妙的差异。必须在程序集安装到全局程序集缓存(GAC)之前对其进行签名,以便多个应用程序共享它。签名是代码访问安全性(CAS)的组成部分,但我没有找到谁能使CAS工作。我相当确定,使用自己生成的证书同样可以正常使用GAC和CAS。

3

它有帮助是因为可执行文件期望一个强命名的程序集。它可以阻止恶意替换你的程序集。此外,用户可能基于强名称授予程序集CAS权限。

我认为你不应该分发.pfx文件,你需要将其保险存放以重新签名程序集。


3
重要的是保密你的PFX文件,因为它包含私钥。
如果该密钥被他人获取,则任何人都可以签署伪装成你的程序或程序集。
为了在Windows中将你的名字与你的程序集关联起来,你需要获得数字证书(包含你的名字的PFX文件部分)并由可信机构签名。
实际上,你将获得一个新的证书,但信息相同。
你需要为此付费(可能每年一次),但证书颁发机构将有效地证明你的存在(在你传真给他们你的护照或驾照和国内账单副本后)。

2

签名并不能唯一地识别程序集。使用私钥进行签名可以唯一地识别程序集的来源。在全局程序集缓存中,需要组合程序集名称、版本和公钥才能唯一地识别一个程序集。 - Quark Soup

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接