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

时间:2008-08-29 21:48:33

标签: .net assemblies signing

我有一个由五个项目组成的解决方案,每个项目都编译为单独的程序集。现在我正在对它们进行代码签名,但我很确定我做错了。这里最好的做法是什么?

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

基本上我不太确定签名对他们有什么影响,或者这里的最佳做法是什么,所以更普遍的讨论会很好。我真正知道的是FxCop对我大吼大叫,通过单击“签署此程序集”复选框并使用Visual Studio(2008)生成.pfx文件,可以轻松修复。

5 个答案:

答案 0 :(得分:43)

如果您的唯一目标是阻止FxCop对您大喊大叫,那么您已找到最佳做法。

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

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

通常,您使用代码签名来验证程序集是否来自特定的受信任来源且尚未修改。 所以每个人都使用相同的密钥。 现在,如何确定信任和身份是另一回事。

更新:如果您获得了software signing certificate from a certificate authority,那么当您通过网络部署时,最终用户如何受益。然后,当他们下载您的程序集时,他们可以验证它们来自 Domenic的软件商店,并且它们在此过程中未被修改或损坏。您还需要在下载安装程序时对其进行签名。这可以防止某些浏览器显示已从未知来源获取的警告。

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

答案 1 :(得分:8)

签名和未签名程序集之间最明显的区别在于ClickOnce应用程序。如果您不对其进行签名,则用户在第一次运行您的应用程序时会收到一个可怕的“未知发布者”警告对话框。如果您使用来自受信任机构的证书进行签名,那么他们会看到一个不那么可怕的对话框。据我所知,使用您自己生成的证书进行签名不会影响“未知发布者”警告。 Instant SSL from Comodo包含对话框的示例。

有一些微妙的差异。您必须先签署程序集,然后才能将其安装到全局程序集缓存(GAC)中,以便多个应用程序共享它。签名是代码访问安全性(CAS)的组成部分,但我没有找到任何可以让CAS工作的人。我非常确定GAC和CAS都可以使用您自己生成的证书。

答案 2 :(得分:3)

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

我认为你不应该分发.pfx文件,你可以安全地重新组装程序集。

答案 3 :(得分:3)

保持PFX文件的密钥非常重要,因为它包含私钥。

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

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

实际上,您将获得一个新证书,但信息相同。

您必须支付此证书(可能是每年一次),但certificate authority将有效保证您的存在(在您传真护照或驾驶执照和国内账单的复印件之后)。

答案 4 :(得分:2)

签名用于唯一标识程序集。更多详情请参阅 How to: Sign an Assembly (Visual Studio)

就最佳实践而言,只要程序集具有不同的名称,就可以使用相同的密钥。