【发布时间】:2011-04-07 15:16:16
【问题描述】:
我们有一个包含许多项目的解决方案(可能有 20 个或更多)。最近我们进行了一些更改,要求其中一些程序集可以从 COM 调用,这意味着我们需要对它们进行强命名。这些程序集引用了我们项目中的其他程序集,这意味着它们也需要强命名。它们还具有 InternalsVisibleTo 属性,因此授予的程序集也必须是强命名的。
我建议我们简单地对它们都进行强命名,而不是试图找出哪些程序集需要签名/强命名。这让一些人对风险感到头晕目眩。我认为没有风险,但他们想要签署程序集的利弊。我能想到的唯一事情是:
优点
- 需要调用 来自 COM 的程序集
- 它将允许我们 将程序集放入 GAC(我们 现在不要这样做)
- 它可以防止 篡改(我们托管应用程序, 它没有安装在客户网站上, 所以问题不大)
缺点
- 它要求我们将来使用的每个程序集都进行签名
我有两个具体问题:
- 您认为一般情况下签署/强名称程序集是个好主意吗?
- 您能想到其他优点或缺点吗?
【问题讨论】:
-
现在必须签署所有内容的想法从何而来?病毒式的是未签名的程序集:您不能从已签名的程序集中引用未签名的程序集。你可以做相反的事情。 必须签名的那些是由于您在第一段中概述的原因。
-
顺便说一句:它不会停止篡改。您可以剥离 SN,并更改引用程序集,一切顺利。我这样做是为了对一些使用 Reflector 和 Reflexil 的商业软件进行概念验证
-
@David:你甚至可以单独使用 ilasm 和 ildasm 来完成。 @Future David:谢谢,我切换了签名/未签名的顺序。
-
@Martino 我认为你把最后一部分搞混了——你不能从已签名的程序集中引用未签名的程序集,但你可以从未签名的程序集中引用已签名的程序集。
-
我从来没有说过我们解决方案中的所有内容必须签名。我的观点是,与其寻找和啄以确定哪些必须签名,不如将它们全部签名更简单。它还可以避免将来出现问题,即开发人员将已签名项目的引用设置为未签名项目,然后解决方案突然无法编译,因为现在我们必须签署新引用的项目并查找所有内容 it 引用以确保 它们 已签名。
标签: .net assembly-signing