当前位置:  开发笔记 > Android > 正文

.NET OpenSource项目和强名称程序集?

如何解决《.NETOpenSource项目和强名称程序集?》经验,为你挑选了3个好方法。

我目前正在考虑开源我的项目,并且正在准备向公众发布的源代码和项目结构.现在我有一个问题:如何处理我的程序集的签名密钥?我应该为开源版本创建一个新密钥,并将其与其他文件一起发布到SVN存储库吗?我应该保留密钥,每个想编译代码的人都应该生成自己的密钥吗?

你怎么处理这个?向公众发布签名密钥让我感到有点不舒服.



1> Jon Skeet..:

对于Protocol Buffers,我发布了密钥.是的,这意味着人们实际上并不相信它是原始的二进制文件 - 但是对于想要稍微修改代码,重建代码并且仍然能够从另一个已签名的程序集中使用它的人来说,它会让生活变得更加容易.

如果有人真的想要一个他们可以信任的协议缓冲版本绝对是使用GitHub代码构建的合法版本,他们可以轻松地从他们信任的源代码构建它.

我当然可以从双方看到它.我想如果我正在编写一个围绕安全性的开源项目,那可能是另一回事.


如果BigCorp决定搞砸了,那么他们确实可以让自己的生活更加艰难.没有释放钥匙,它会让每个人的生活变得更加艰难.我宁愿让大多数人的生活更轻松,让人们偶尔在脚下射击,而不是让其他人的生活变得更加艰难.
@Cheeso:对于Noda Time,我认为我们将拥有一个任何人都可以构建的密钥,然后是一个只有少数提交者可以访问的私钥.这样,默认情况下每个人都会获得一个签名的程序集,但预构建的二进制文件可以验证为"我们的".我认为这是两全其美的.如果您描述的问题(保护他人自己的问题)是次要问题,那么我确实会告诉我,那么您应该描述主要的*实际*问题.
他们创建密钥对签署程序集有多难?这是命令行上的一个额外步骤!它只在ONCE完成.永远.对于ProtoBufs来说这可能无关紧要,但对于更普遍的东西,比如说一个XML库,它会导致毁灭.围绕Java的Xerces lib的Jar-H3LL是一个很好的教训.到处都有版本.您的应用程序依赖于多个OSS项目,并且每个项目都依赖于不同版本的Xerces.强命名(Java缺乏)修复了这个问题.但只有强大的命名与诚信.

2> Cheeso..:

不要松开钥匙.

向公众发布签名密钥时,您应该感到不舒服.这不是项目的签名.这是你的签名.只有在保密密钥时才能保持二进制文件签名的完整性.释放密钥会破坏已签名程序集的含义和意图以及强大的命名,从而引入新的错误可能性,从而降低每个系统的可靠性.不要松开钥匙.

对于DotNetZip,我不发布密钥.但这里的关键点是:关键不属于项目; 这是我的关键.很多人都要求密钥,以便他们可以重新构建已签名的二进制文件,但这没有任何意义.我使用密钥来签署多个DotNetZip.根据定义,使用该密钥签名的任何二进制文件都由我签名.使用我的密钥具有相同强名称的任何两个二进制文件都保证是相同的.释放密钥会消除这些保证,并且会破坏强名称的全部目的以及它们周围的安全性.

想象一下开发人员选择他们自己的版本号,并用我的密钥重新签名修改后的二进制文件.现在世界将有2个具有相同强名称但具有不同内容的程序集.

想象一下,如果我能用你的钥匙签署任何集会.如果你发布了你的密钥,我可以添加我喜欢的任何代码 - 甚至是恶意代码 - 然后签名,然后秘密地用"坏"代替你的任何"好"签名二进制文件.没有人能分辨出差异.

这已破了.自由共享密钥消除了使用签名组件的任何优势.

如果人们想要修改项目中的代码,然后在强名称程序集中重新使用修改后的版本,他们可以使用自己的密钥对修改后的版本进行签名.这并不困难.


很抱歉对此进行了非常晚的跟进:LGPL _requires_您允许某人放入另一版本的LGPL库.如果(我的假设)LGPL库无法替换,则违反LGPL.

3> Cameron MacF..:

我不会公开发布密钥.签署程序集的重点是人们可以相信你是唯一触及二进制文件的人,所以如果添加了任何非法代码,那么签名就会关闭,人们就知道不相信程序集了.

签名程序集可以保护您免受其他人向您的二进制文件添加"错误"代码并假装它是合法版本.


重新分发项目的每一方都应该(a)重写您生成的二进制文件的未经修改的签名版本,或者(b)重写二进制文件的修改版本,使用不同的密钥签名 - 他们自己的密钥,或者(c)重写源.选项不是互斥的.但他们的重要部分是关键必须属于签约方,而不是项目.否则,卡梅伦指出,签署的意义和价值被破坏了.
推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有