[FxCop.设计规则]2. 程序集应该拥有有效的强命名

原创 2006年06月06日 10:18:00

 

版权声明:

 

本文由timewolf完成,首发于CSDN,作者保留版权。
未经许可,不得使用于任何商业用途。
欢迎转载,但请保持文章及版权声明完整。
如需联络请发邮件:karla9(AT)eyou(dot)com

原文引用:

Assemblies should have valid strong names

TypeName:

AssembliesShouldHaveValidStrongNames

CheckId:

CA2210

Category:

Microsoft.Design

Message Level:

CriticalError

Certainty:

95%

Breaking Change:

NonBreaking


Cause: An assembly is not signed with a strong name, the strong name could not be verified, or the strong name would not be valid without the current registry settings of the computer.

Rule Description

This rule retrieves and verifies the strong name of an assembly. A violation occurs if any of the following are true:

  • The assembly does not have a strong name.

  • The assembly was altered after signing.

  • The assembly is delay-signed.

  • The assembly was incorrectly signed, or signing failed.

  • The assembly requires registry settings to pass verification. For example, the Strong Name tool (Sn.exe) was used to skip verification for the assembly.

The strong name protects clients from unknowingly loading an assembly that has been tampered with. Assemblies without strong names should not be deployed outside of very limited scenarios. If you share or distribute assemblies that are not correctly signed, the assembly can be tampered with, the common language runtime might not load the assembly, or the user might have to disable verification on his or her computer. An assembly without a strong name suffers from the following drawbacks:

  • Its origins cannot be verified.

  • The common language runtime cannot warn users if the contents of the assembly have been altered.

  • It cannot be loaded into the global assembly cache.

Note that to load and analyze a delay-signed assembly, you must disable verification for the assembly.

How to Fix Violations

To fix a violation of this rule, use the Strong Name tool (sn.exe) to create a key file and sign the assembly with a strong name using one of the following procedures:

When to Exclude Messages

Only exclude a message from this rule if the assembly is used in an environment where tampering with the contents is not a concern.

引发原因:

1.  程序集没有使用强命名进行签名

2.  强命名不能被校验

3.  程序集的强命名依赖于当前计算机的设置才有效。

规则描述:

这个规则读取并校验一个程序集的强命名,下面任何一条都会引起这条规则校验失败:

1.  程序集没有进行强命名签名

2.  进行签名后,程序集被修改过。

3.  程序集被设置成延迟签名

4.  程序集签名失败

5.  程序集需要一定的注册表设置才能通过强命名校验

例如:通过强命名工具(Sn.exe)设置跳过对这个程序集的强命名校验

 

强命名保护用户不会使用一个被篡改的程序集。一个没有强命名的程序集只能被使用在非常小的范围内。如果你部署一个没有进行正确签名的程序集,程序集就有可能会被肆意篡改,以至于CLR可能会拒绝载入该程序集。在此情况下,用户就不得不将他的计算机设置为忽略强命名校验。

 

没有强命名的程序集有如下缺点:

1.  程序集的来源将不能被保证

2.  用户无从得知程序集是否被篡改过

3.  程序集不能被载入GAC(全局程序集缓存)

注意:如果需要分析一个延迟签名的程序集,必须禁用这条规则。

修复问题:

使用强名称工具(sn.exe)生成Key文件,并用这个文件签名程序集。你可以使用下面的一种方法签名这个程序集:

1.  使用.NET Framework SDK中的程序集连接工具(Al.exe)

2.  .NET Framework v1.0v1.1中,使用System.Reflection.AssemblyKeyFileAttributeSystem.Reflection.AssemblyKeyNameAttribute特性(Attribute)标记程序集。

3.  .NET Framework v2.0中,使用/keyfile或者/keycontainer编译指令。(在C++中,使用/KEYFILE or /KEYCONTAINER连接指令)

可否忽略:

只有当用户(或开发者)不在意程序集是否会被篡改的时候,可以忽略该规则引发的警告

详解.NET程序集的加载规则

程序集的加载涉及到很多方面的知识,包括配置文件、全局缓存装配、私有目录等的查找。用LoadAWithPartialName方法加载程序集,必须提供程序集的文本名称,还可以包公钥标记、版本或区域性等,但...

详解.NET程序集的加载规则

  • 2013年12月09日 16:21
  • 42KB
  • 下载

.NET程序集强命名删除与再签名技术 源代码剖析

如果你想去除一个程序集的强签名(strong name),目前为止可以有两个途径 1  反编译为IL代码,删除签名部分,再编译为程序集 2  应用Re-Sign程序,直接对一个程序集再签名...

所引用的程序集没有强命名

2013-10-28 23:17     143人阅读     评论(0)     收藏     举报     1.打开SDK 命令提示窗口;  也就是VS2012 开发人员命令提...

强命名程序集,签名,延迟签名

强命名程序集        如果一个程序集有一个唯一的标记,那么这个程序集就可以叫做强命名程序集。在.NET框架中是通过公钥/私钥加密来产生这个唯一标记的。一个强命名程序集包含四个唯一标志程序集...
  • Yoryky
  • Yoryky
  • 2014年03月18日 16:02
  • 1039

使用命令行给第三方dll程序集强命名(原)

一般我们在给程序集强命名时,都会直接使用VS进行强命名,但是这只是我们在有源代码时才这么做。如果我们使用的是第三方的程序集,此方法是行不通。这种情况下,我们就需要使用到VS里的另一工具:Sn.exe ...
  • zmoneyz
  • zmoneyz
  • 2013年05月16日 22:45
  • 1284

强命名程序集和部署到GAC

如何创建强命名程序集(Strong Name Assembly)       创建一个强命名程序集首先需要获得一个用强命名实用工具    (Strong Name Utility,即SN.exe...

强命名程序集 sn.exe GAC(转http://blog.csdn.net/chenfeiyang2009/article/details/6055199)

2010-12-04 19:51 204人阅读 评论(0) 收藏 举报 GAC 强名的作用是识别篡改、防止dll冲突。   GAC中的所有的Assembly都会存放在系统目录"%...
  • fjfdszj
  • fjfdszj
  • 2011年11月18日 21:40
  • 912

安装VS2008的Win7:gacutil.exe、sn.exe 所在位置及如何使用gacutil.exe注册强命名程序集至GAC中

有些时候我们需要注册一个或多个程序集到GAC(全局程序集缓存)中,通常有下面几种方式完成注册。 1、打开VS自带的命令行窗口注册。 2、通过批处理文件执行命令注册。 3、直接拖入GAC中。(据说...

如何强命名程序集(转)

如何强命名程序集(转) 强命名程序集的缘由:       目前Windows中出现的DLL Hell问题(两个不同的公司可能开发处具有相同名称的程序集,如果将相同名称的程序集放置到...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[FxCop.设计规则]2. 程序集应该拥有有效的强命名
举报原因:
原因补充:

(最多只允许输入30个字)