在我接管的一些C#代码中(在Visual Visual Studio 2005中),我注意到所有的程序集都是用相同的.snk
文件签名的。
发布于 2010-10-20 15:50:06
为什么之前的作者会以这种方式对程序集进行签名?
不知道,也许他想让他所有的程序集都用相同的密钥签名。
对程序集进行签名是必要的吗?不对它进行签名会有什么问题?
不,它不是必需的,但它是一种允许您确保程序集真实性的机制。它允许你确保一个程序集没有被篡改,它确实来自这个作者。如果你想把它们放到GAC中,这也是必要的。
签名程序集有什么缺点-会导致延迟吗?
签名的程序集只能加载其他签名的程序集。此外,它们被绑定到特定的版本,这意味着如果您想使用不同的版本,则需要使用绑定重定向或重新编译应用程序。由于签名的验证,也有一些性能开销,但它是如此之少,你不应该担心。
发布于 2010-10-20 15:48:26
如果要将程序集放入GAC中,则需要对程序集进行签名。
如果对可执行文件进行签名,则它所链接的任何类库也需要进行签名。如果您使用的是第三方库(特别是如果您需要使用ActiveX控件或类似控件),这可能会很困难。
Richard Grimes写了一个关于.NET安全性的很好的研讨会,其中包括一个关于这方面的章节:
所有程序集都使用相同的.snk文件签名的原因可能是,如果他使用具有代码覆盖率的单元测试。为了能够进行代码覆盖(至少使用Visual Visual Studio 2005中测试版本中内置的工具),并且如果对程序集进行了签名,则需要指定用于签名的.snk文件,但我认为您只能为整个解决方案指定一个.snk文件,因此如果您使用不同的.snk文件对各种类库进行签名,则一次只能检查其中一个库上的代码覆盖率。
发布于 2010-10-20 15:51:23
对程序集进行签名的一个非常重要的原因是,这样您就可以确定它就是您的程序集。由于私钥是您的,因此其他任何人都不能用该私钥对程序集进行签名。这意味着当程序集的公钥是您知道的(可以使用GetType().Assembly.GetName().GetPublicKey()
函数检索)时,该程序集就是您的,并且没有被篡改。
https://stackoverflow.com/questions/3975723
复制相似问题