【问题标题】:Best practices for signing assemblies with multiple projects and developers与多个项目和开发人员签署程序集的最佳实践
【发布时间】:2010-11-27 01:39:37
【问题描述】:

我正在寻找在一个拥有 30 多个开发人员、20 多个解决方案和 60 多个项目的组织中应用签名程序集的建议和最佳实践。我们正在使用 Visual Studio Team System 2008 和 TFS。

虽然创建密钥和签署程序集是一个非常简单直接的过程,但我担心我们如何以最佳方式管理它。

到目前为止我的想法:

  • 每个解决方案(通常包含 3 到 20 个项目)都将在解决方案根文件夹中放置一个 .pfx 密钥文件。
  • 每个解决方案都有一个唯一的密钥强密码。

我们会遇到这种方法的任何问题吗?

其他一些想法:

  • 对解决方案中的所有项目使用相同的密钥文件。这会让我们的事情变得更容易吗?这是个坏主意吗?有可能吗?
  • 每个项目都应该有自己唯一的密钥吗?为什么,为什么不呢?

欢迎任何意见、好的/坏的经验和建议。 :)

【问题讨论】:

    标签: .net visual-studio assembly-signing


    【解决方案1】:

    您还可以将强名称密钥保存在根级别的文件夹中,与所有项目文件夹处于同一级别。 当您在项目属性 -> 签名选项卡中选择此文件时,密钥文件将被复制到项目文件夹中。 删除此文件。在记事本中打开 .csproj 文件。寻找以下标签 我的key.snk 手动编辑密钥文件的路径,确保指定项目文件夹的相对路径。保存文件。 现在在 Visual Studio 中打开项目属性。您可以看到更新后的路径指向正确的位置。

    【讨论】:

      【解决方案2】:

      我们目前对解决方案中的每个项目都使用相同的强密钥 (.SNK)。根据您的项目,您如何管理每个项目的不同键。

      如果您想要更高的安全性,我想您可以为每个项目重新创建密钥,但管理起来将是一场噩梦。请记住,在一天结束时,SNK 只是显示代码来自您的公司,并防止程序集被更改,这不是一个巨大的内部安全功能。

      为此,如果您不信任/不希望开发人员构建代码,您应该限制源代码控制并考虑使用构建服务器等。

      【讨论】:

        【解决方案3】:

        过去,我曾非常有效地为多个解决方案和项目使用一个键。它是一种简单的方法,可确保只有有权访问私钥文件的人才能发布通过强名称检查的构建。

        注意:要使用单个密钥文件,我们发现最简单的方法是将文件作为链接添加到每个项目。

        我看到的一个缺点是,让您的开发人员可以使用密钥文件意味着它不像应有的那样私密。理想情况下,应该尽可能少的人(例如仅构建过程)有权访问/知道密码。

        单一文件方法使密钥的管理简单(只有一个),同时仍然允许强命名的好处。

        【讨论】:

        • 太好了,我想我们会试试的。您能解释一下如何将文件添加为链接吗?我认为我不熟悉 VS 的该功能。 :)
        • 添加时,按钮被拆分,右侧有一个箭头。单击箭头,您将看到“添加为链接”:)
        • 啊,当然。谢谢。 :) 但我认为我们必须将 .pfx 文件复制到各个解决方案/项目中,因为如果网络中断并且您不再访问该文件,则无法编译该项目。最终,我们将在 TFS 上的构建过程中将“公共密钥”替换为秘密版本。
        • 对于 VS2015,添加 .pfx 文件作为链接并在“签名”选项卡中选择它会导致“无法从密钥文件获取 MD5 校验和。找不到文件”错误消息框。但是,令人惊讶的是,此后程序集似乎是强签名的,并且在其他强签名的 dll 中正常构建和加载。尽管如此,这表明将键引用为链接并不是一种标准做法,所以最好还是继续复制键
        猜你喜欢
        • 2023-03-07
        • 1970-01-01
        • 2011-11-02
        • 1970-01-01
        • 1970-01-01
        • 2021-03-30
        • 2014-02-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多