为什么要在集会上签名?

在我接手的一些 C # 代码中(在 VisualStudio2005中) ,我注意到所有程序集都使用相同的 .snk文件签名。

  • 为什么前一个作者要用这种方式在程序集上签名?
  • 是否需要对程序集进行签名,以及 不签是不对的?
  • 有什么缺点 签署程序集会导致延迟吗?
63474 次浏览

如果要将程序集放入 GAC中,则需要对程序集进行签名。

如果对可执行文件进行签名,那么它链接到的任何类库也都需要进行签名。如果您正在使用第三方库(特别是如果您需要使用 ActiveX控件或类似的控件) ,这可能会很困难。

Richard Grimes 在 .NET中写了一个关于安全性的很好的研讨会,其中有一章是关于这个的: 安全研讨会

所有程序集使用相同的。如果他使用代码覆盖率的单元测试,snk 文件可能是。要能够进行代码覆盖(至少使用内置到 VisualStudio2005测试版本中的工具) ,并且如果程序集已签名,则需要指定。Snk 文件用于签名,但我认为您只能指定一个。为整个解决方案提供 snk 文件,所以如果您使用不同的。Snk 文件一次只能检查其中一个文件的代码覆盖率。

为什么前一个作者要用这种方式在程序集上签名?

不知道,也许他希望他所有的程序集都用同一把钥匙签名。

是否有必要为程序集签名? 不签名有什么错?

不,它不是必需的,但它是一种机制,允许您确保程序集的真实性。它允许您确保程序集没有被篡改,并且它确实来源于此作者。如果你想把他们加入广汽,这也是必要的。

签名程序集有什么缺点——它会导致延迟吗?

已签名程序集只能加载其他已签名程序集。它们还与特定的版本绑定在一起,这意味着如果您想使用不同的版本,就需要使用绑定重定向或重新编译应用程序。由于签名的验证,也有一些性能开销,但是这么少,您不应该担心。

为程序集签名的一个非常重要的原因是,这样可以确保它是您的程序集。因为私钥是您的,所以没有其他人可以使用相同的密钥对程序集进行签名。这意味着当程序集的公钥是您知道的(您可以使用 GetType().Assembly.GetName().GetPublicKey()函数检索它)时,程序集就是您的,并且它没有被篡改。

尽管有签名 dll 的所有用法,但是签名 dll 只有两个原因

1. 版本控制

2. 认证

版本控制表示 dll 是基于什么版本构建的,并且在将它们推入 GAC 时,可以存在两个具有相同名称但版本不同的 dll

身份验证表示 dll 是否未被篡改,并且在创建时是否存在。

如果你想了解更多的基础知识和 dll 签名,你可以参考 给你

除了现有的答案,我会添加你 必须使用的签名时,你的 DLL 将被动态加载和第三方软件使用。这不是技术要求本身,但它是合理的,因此非常普遍,第三方软件生产商执行这样的政策,应有的安全考虑。

必须为程序集签名的示例:

  • 开发 Windows Shell/文件资源管理器扩展,例如: 用于文件资源管理器的上下文菜单扩展
  • 开发 VisualStudio 扩展,如: 项目/项模板向导 GUI

请原谅我回答一个老问题。但是这里的大多数响应都暗示强命名提供了安全性。但微软建议不要将其用于安全目的。

强名字签名的文件上写着:

警告

安全性不要依赖强名称,它们只提供唯一的标识。

它主要用于确保您拥有预期的二进制文件,而不是附带具有相同名称和版本(或通过绑定重定向设置的版本)的不同二进制文件

Microsoft 列出了使用强命名的原因:

  • 您希望启用由强名称程序集引用的程序集,或者希望授予其他强名称程序集对您的程序集的朋友访问权限。
  • 应用程序需要访问同一程序集的不同版本。这意味着您需要不同版本的程序集在同一应用程序域中并排加载而不发生冲突。例如,如果具有相同简单名称的程序集中存在不同的 API 扩展,则强命名为程序集的每个版本提供唯一标识。
  • 您不希望对使用程序集的应用程序的性能产生负面影响,因此希望程序集与域无关。这需要强命名,因为必须在全局程序集缓存中安装与域无关的程序集。
  • 您希望通过应用发布者策略集中为应用程序提供服务,这意味着程序集必须安装在全局程序集缓存中。

报告还指出:

对于.NETCore,强名称程序集不提供实质性好处。

还有

如果您是开放源码开发人员,并且希望获得强名称程序集的身份优势,以便更好地兼容。NET 框架,请考虑签入与源代码管理系统的程序集关联的私钥。

因此,微软表示可以只发布带有强名称的私钥和代码。这意味着任何人都可以使用正确的公钥创建强名称程序集。我认为可以假定强命名不是 Authenticy 的安全来源。

点击这里阅读更多内容: https://learn.microsoft.com/en-us/dotnet/standard/assembly/strong-named