Csharp/C#教程:管理开源项目的强名称密钥对的推荐方法是什么?分享


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

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

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

编辑

另一个需要注意的是,项目中的某些程序集通过InternalsVisibleToAttribute授予朋友访问权限,并通过项目引用构建这些朋友。 因此,在引用签名的程序集时,此类程序集需要使用强名称。 但是,如果密钥对未分发,那么最终用户如何构建源并维护项目关系? 如果使用临时密钥对文件,签名程序集的公钥标记是否会更改,从而打破InternalsVisibleToAttribute引用?

您不应该分发密钥对。 强名称用于validation新版本的程序集来自同一发布者。

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

如果代码中唯一的程序集引用是在项目文件中编码的那些,那么Sharptooth的解决方案很有效。 如果您的项目通过InternalsVisibleToAttribute或其他需要强名称字符串的方式引用其他程序集,则使用临时密钥构建存储库源是不可行的。 这样做会更改强名称字符串中存在的公钥引用并破坏代码。

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

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

我首先手动完成所有这些操作,但后来意识到这可以通过简单的方式自动完成。 第一和第三步骤可以用XSLT实现,其中第二步骤可以用正则表达式搜索/替换function实现。

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

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

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

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

请参阅此处以供参考: https : //docs.microsoft.com/en-us/dotnet/framework/app-domains/strong-named-assemblies

不要依赖强名称来保证安全。 它们仅提供独特的身份。

他们还专门针对开源项目:

如果您是开源开发人员并且希望获得强名称程序集的身份优势,请考虑将与程序集关联的私钥检入源控制系统。

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

上述就是C#学习教程:管理开源项目的强名称密钥对的推荐方法是什么?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/997278.html

(0)
上一篇 2021年12月26日
下一篇 2021年12月26日

精彩推荐