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

我有一个由五个项目组成的解决scheme,每个项目都可以编译来分离程序集。 现在我正在代码签名他们,但我很确定我做错了。 这里最好的做法是什么?

  • 用不同的密钥签名; 确保密码不同
  • 用不同的密钥签名; 如果你想使用相同的密码
  • 使用相同的密钥签名
  • 还有其他的东西

基本上我不太清楚“签名”对他们有什么作用,或者最佳做法是什么,所以更普遍的讨论是很好的。 我真正知道的是FxCop对我大吼,通过点击“Sign this assembly”checkbox并使用Visual Studio(2008)生成一个.pfx文件,很容易解决。

如果你唯一的目标是阻止FxCop向你大喊大叫,那么你已经find了最好的做法。

签署组件的最佳做法完全取决于您的目标和需求。 我们需要更多信息,比如您的预期部署:

  • 供个人使用
  • 用于企业networkingPC作为客户端应用程序
  • 在Web服务器上运行
  • 在SQL Server中运行
  • 通过互联网下载
  • 在收缩包装的CD上出售
  • 上传到一个控制论的大脑
  • 等等。

通常,您使用代码签名来validation程序集是否来自特定的可信来源并且尚未修改。 所以每个有相同的关键是好的。 现在如何确定这种信任和认同是另一回事。

更新:当您通过Web进行部署时,这对您的最终用户有什么好处,是否已从证书颁发机构获得软件签名证书 。 然后,当他们下载你的程序集,他们可以validation他们来自Domenic的软件商场 ,他们一直没有被修改或损坏。 下载时,您还需要签署安装程序。 这可以防止某些浏览器显示已从未知来源获得的警告。

请注意,您将支付软件签名证书。 你得到的是authentication机构成为可靠的第三方谁validation你是谁说你是谁。 这是因为一个信任networking可以追溯到安装在操作系统中的根证书。 有几个证书颁发机构可供select,但您需要确保目标操作系统上的根证书支持它们。

签名和未签名程序集之间最明显的区别是在ClickOnce应用程序中。 如果您没有签名,那么用户在第一次运行您的应用程序时将会看到一个可怕的“未知发布者”警告对话框。 如果您已经使用可信任机构证书签名,那么他们会看到一个不那么可怕的对话框。 据我所知,用自己生成的证书进行签名不会影响“未知发布者”警告。 来自Comodo的即时SSL有对话框的例子。

有一些微妙的差异。 在将程序集安装到全局程序集caching(GAC)之前,您必须签署一个程序集,以便可以由多个应用程序共享。 签名是代码访问安全(CAS)不可或缺的一部分,但是我还没有find任何可以让CAS工作的人。 我很确定,GAC和CAS都能正常处理您自己生成的证书。

它有帮助,因为可执行文件需要强命名的程序集。 它会阻止任何人在另一个集会中恶意代替你的一个。 此外,用户可能会根据强名称授予程序集CAS权限。

我不认为你应该分发的.pfx文件,你保持安全的辞职组件。

签名用于唯一标识程序集。 更多详细信息如何:签署程序集(Visual Studio)

就最佳实践而言,只要组件名称不同,就可以使用相同的密钥。

保留您的PFX文件是很重要的,因为它包含私钥。

如果该密钥提供给其他人,则任何人都可以签署伪装成你的程序集或程序。

要将您的名字与您的程序集关联起来(在Windows的眼中),您需要获得一个由受信任的权威机构签名的数字证书(包含您的名字的PFX文件的一部分)。

其实你会得到一个新的证书,但具有相同的信息。

您必须支付这个证书(可能是每年),但是证书颁发机构将有效地保证您的存在(在您传真了护照或驾驶证复印件和国内账单之后)。