【问题标题】:What signing method to use for public open-source projects?公共开源项目使用什么签名方法?
【发布时间】:2010-03-26 07:43:52
【问题描述】:

我正在 CodePlex 上发布一个开源库,并希望 dll 文件具有强名称,以便可以将它们添加到 GAC。

签名的最佳选择是什么?

我应该使用 SNK 吗?如果是这样,每个人都可以访问密钥。我对每个人都可以访问没有问题,但这是一个好方法吗?

我应该使用 PFX 吗?如果是这样,是否意味着其他下载源代码的人无法构建解决方案?

我喜欢做的是我是唯一一个可以访问密钥的人,这样签名的程序集也具有一定程度的真实性,但同时不要阻止其他开发人员下载、构建或更改自己的源代码,并能够发布主项目的更改。

【问题讨论】:

标签: .net open-source dll signing


【解决方案1】:

我们已经为Noda Time 讨论过这个问题。我相信共识是​​,当我们使用强命名时,我们将拥有一个只有少数核心开发人员可以访问的密钥,并将其用于发布构建 - 但还有另一个公开可用的密钥。因此,任何想要确保他们只针对他们知道已被项目成员“批准”的构建运行的任何人都可以针对私有密钥的公钥令牌构建,但任何人都可以下载并构建“不那么受信任”版本。

拥有公开可用密钥的替代方法是让大多数构建配置没有强命名 - 但我更喜欢每个构建都被强命名的版本,这样它与完整版本构建之间的差异很小。

【讨论】:

  • 所以,您建议我的项目中有两个密钥。一个 SNK,这是默认密钥,每个人都可以使用它签名。另一个 PFX 密钥,有密码,我是唯一知道密码的人。当我想要发布时,我会更改密钥首选项,构建 DLL 并发布它吗?发布 PFX 是否意味着任何知道密码的人都可以使用它?因为我更希望一切都在项目的源代码控制中。
  • @Irchi:不,我根本不建议使用 PFX 键。我建议您拥有自己的 SNK,并保密。我对 PFX 一无所知。想要“一切都在项目的源代码控制中”从根本上与“我喜欢做的是我是唯一有权访问密钥的人”不兼容,除非您可以在源代码中指定“无读取”访问权限控制一些文件。
  • @Steven:我没想到会这样。
【解决方案2】:

我在 CodePlex 上对我的项目所做的是发布与 SNK 强烈签名的版本。但是,此 SNK 不受源代码控制且不公开可用。因此,我是唯一可以使用此密钥对程序集进行强烈签名的人。我解释了here

【讨论】:

  • 正如我在回答中提到的,我认为可下载版本拥有一个公共 SNK 很好 - 这样当您从“开发版本”迁移时,您不会有太多的环境变化" 到 "发布版本" - 构建是否已签名等方面没有区别。不过只是 MHO。
猜你喜欢
  • 2020-10-10
  • 2022-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-01
相关资源
最近更新 更多