首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >建议为开源项目管理强名称密钥对的推荐方法是什么?

建议为开源项目管理强名称密钥对的推荐方法是什么?
EN

Stack Overflow用户
提问于 2009-12-02 07:43:08
回答 3查看 3.7K关注 0票数 9

我管理一个开源项目,并希望签署在项目的二进制包中发布的二进制文件。我使用Visual csprojsln文件来管理和构建我的项目,并将这些文件作为项目源代码包的一部分分发。

如何对生成的构建二进制文件进行签名,而不必分发snk密钥对文件?如果使用Visual对程序集进行签名,则每个项目文件现在都需要密钥对的副本才能生成。我不习惯分发密钥对,即使它是密码保护。

编辑

另一个警告是,项目中的某些程序集通过InternalsVisibleToAttribute授予朋友访问权限,并通过项目引用构建朋友。因此,此类程序集在引用签名程序集时需要使用强名称。但是,如果密钥对不是分布式的,那么最终用户如何构建源代码并维护项目关系呢?如果使用临时密钥对文件,那么签名程序集的公钥令牌是否会改变,从而破坏InternalsVisibleToAttribute引用?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-12-07 21:12:34

如果代码中的唯一程序集引用是项目文件中编码的程序集引用,则Sharptooth's solution工作良好。如果您的项目通过InternalsVisibleToAttribute或其他需要强名称字符串的方式引用其他程序集,则使用临时键构建存储库源是不可行的。这样做将更改强名称字符串中存在的公钥引用,并破坏代码。

这是我的应用程序中的情况,所以我需要采用不同的方法。

我基本上在一个单独的文件夹中创建了一个slncsproj文件的副本,并对csproj文件进行了如下修改。

sources.

  • Copied

  • 将所有文件引用转换为链接,指向原始的,并修改每个AssemblyInfo.cs文件以包含InternalsVisibleToAttribute的用法,其中包含一个强AssemblyInfo.cs文件,以便snk文件引用是一个相对路径(无需将snk文件复制到每个项目)

我首先手动完成了所有这些工作,但后来意识到这可以以一种简单的方式实现自动化。第一步和第三步可以用XSLT实现,第二步可以用regex搜索/替换函数实现。

由于我现在需要维护两种解决方案,因此有必要自动完成这项任务,以避免未来的麻烦。

存储库中的源代码不使用强名称构建程序集,这很好,因为我不想对最终用户施加任何构建限制或进程。

票数 2
EN

Stack Overflow用户

发布于 2009-12-02 07:52:47

你不应该分发键盘。strongname用于验证程序集的新版本是否来自同一个发行者。

如果另一个开发人员想要将您的项目分支,他们将生成他们自己的键盘,这将有效地表明他们的版本不是来自您,这样依赖于您的其他程序集将不再加载,除非它们被重新编译。这并不总是很方便,但它可以保护您免受发布恶意程序集版本的人的影响,并以静默方式分发它。

票数 6
EN

Stack Overflow用户

发布于 2018-09-08 04:48:25

这是一个古老的问题,但目前最高投票的答案是不准确的,所以我认为这是值得发布一个新的答案。

对于开放源码项目,Microsoft建议将私钥签入存储库。这是安全的,因为强名称键用于标识,而不是安全性。

参见这里的参考:https://learn.microsoft.com/en-us/dotnet/framework/app-domains/strong-named-assemblies

不依赖强名称作为安全性。它们只提供一个独特的身份。

它们还专门针对开放源码项目:

如果您是一个开源开发人员,并且您想要获得强命名程序集的身份优势,请考虑将与程序集关联的私钥签入源代码管理系统。

如果您想要程序集的安全性,那么应该查看Authenticode签名https://blogs.msdn.microsoft.com/shawnfa/2005/12/13/authenticode-and-assemblies/

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1831248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档