【问题标题】:Best practices for signing .NET assemblies?签署 .NET 程序集的最佳实践?
【发布时间】:2023-03-07 02:24:01
【问题描述】:

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

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

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

【问题讨论】:

    标签: .net assemblies signing


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

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

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

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

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

          您必须为该证明付费(可能每年),但certificate authority 将有效地证明您的存在(在您将护照或驾驶执照副本和国内账单传真给他们之后)。

          【讨论】:

            【解决方案5】:

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

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

            【讨论】:

            • 签名不能唯一标识程序集。使用私钥签名唯一标识程序集的来源。需要程序集名称、版本和公钥的组合来唯一标识 GAC 中的程序集。
            猜你喜欢
            • 1970-01-01
            • 2010-11-27
            • 2013-06-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-05-19
            • 2015-08-05
            • 1970-01-01
            相关资源
            最近更新 更多