首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C#:为什么要对程序集进行签名?

C#:为什么要对程序集进行签名?
EN

Stack Overflow用户
提问于 2010-10-20 15:46:12
回答 7查看 59.1K关注 0票数 161

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

  • 以前的作者为什么要以这种方式对程序集进行签名?
  • 对程序集进行签名是必要的,不对程序集进行签名会有什么问题?
  • 对程序集进行签名有什么缺点-是否会导致延迟?
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-10-20 15:50:06

为什么之前的作者会以这种方式对程序集进行签名?

不知道,也许他想让他所有的程序集都用相同的密钥签名。

对程序集进行签名是必要的吗?不对它进行签名会有什么问题?

不,它不是必需的,但它是一种允许您确保程序集真实性的机制。它允许你确保一个程序集没有被篡改,它确实来自这个作者。如果你想把它们放到GAC中,这也是必要的。

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

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

票数 193
EN

Stack Overflow用户

发布于 2010-10-20 15:48:26

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

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

Richard Grimes写了一个关于.NET安全性的很好的研讨会,其中包括一个关于这方面的章节:

所有程序集都使用相同的.snk文件签名的原因可能是,如果他使用具有代码覆盖率的单元测试。为了能够进行代码覆盖(至少使用Visual Visual Studio 2005中测试版本中内置的工具),并且如果对程序集进行了签名,则需要指定用于签名的.snk文件,但我认为您只能为整个解决方案指定一个.snk文件,因此如果您使用不同的.snk文件对各种类库进行签名,则一次只能检查其中一个库上的代码覆盖率。

票数 35
EN

Stack Overflow用户

发布于 2010-10-20 15:51:23

对程序集进行签名的一个非常重要的原因是,这样您就可以确定它就是您的程序集。由于私钥是您的,因此其他任何人都不能用该私钥对程序集进行签名。这意味着当程序集的公钥是您知道的(可以使用GetType().Assembly.GetName().GetPublicKey()函数检索)时,该程序集就是您的,并且没有被篡改。

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

https://stackoverflow.com/questions/3975723

复制
相关文章

相似问题

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