46

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

  • 用不同的密钥对每个签名;确保密码不同
  • 用不同的密钥对每个签名;如果需要,请使用相同的密码
  • 使用相同的密钥对每个签名
  • 完全不同的东西

基本上我不太确定“签名”对他们有什么作用,或者这里的最佳实践是什么,所以更普遍的讨论会很好。我真正知道的是FxCop对我大喊大叫,通过单击“签署此程序集”复选框并使用 Visual Studio (2008) 生成一个 .pfx 文件很容易解决。

4

5 回答 5

44

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

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

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

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

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

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

于 2008-08-29T21:56:56.983 回答
8

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

还有一些细微的差别。您必须先签署程序集,然后才能将其安装在全局程序集缓存 (GAC) 中,以便多个应用程序共享该程序集。签名是代码访问安全 (CAS) 不可或缺的一部分,但我还没有找到可以让 CAS 工作的人。我很确定 GAC 和 CAS 都可以很好地处理您自己生成的证书。

于 2008-09-05T20:26:28.417 回答
3

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

我认为您不应该分发 .pfx 文件,您可以确保该文件安全,以便退出程序集。

于 2008-08-29T22:11:08.650 回答
3

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

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

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

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

You'll have to pay for this certificate (probably annually), but the certificate authority will effectively vouch for your existence (after you've faxed them copies of your passport or driver's permit and a domestic bill).

于 2008-09-11T09:23:27.323 回答
2

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

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

于 2008-08-29T22:00:01.373 回答