公共语言运行库中的程序集-05程序集安全注意事项

程序集安全注意事项

在您生成程序集时,您可以指定该程序集运行所需的一组权限。是否将特定的权限授予程序集是基于证据的。

使用证据有两种截然不同的方式:

  • 将输入证据与加载程序所收集的证据合并,以创建用于策略决策的最终证据集。使用这种语义的方法包括 Assembly.LoadAssembly.LoadFrom Activator.CreateInstance
  • 原封不动地使用输入证据作为用于策略决策的最终证据集。使用这种语义的方法包括 Assembly.Load(byte[]) AppDomain.DefineDynamicAssembly()

通过在将运行程序集的计算机上设置安全策略,您可以授予一些可选的权限。如果您希望代码可以处理所有潜在的安全异常,可以执行以下操作之一:

  • 为您的代码必须具有的所有权限插入权限请求,并预先处理在未授予权限时发生的加载时错误。
  • 不要使用权限请求来获取您的代码可能需要的权限,但一定要准备处理在未授予权限时发生的安全异常。

说明:安全性是一个较为复杂的领域,您将要做出很多选择。有关更多信息,请参见安全性的基础概念

在加载时,程序集的证据用作安全策略的输入。安全策略是由企业和计算机的管理员以及用户策略设置建立的,它在执行时确定向所有托管代码授予的权限组。可以为该程序集(如果该程序集具有签名工具生成的签名)的发行者建立安全策略,或者为该程序集的下载网站和区域(就 Internet Explorer 而言)建立安全策略,也可以为该程序集的强名称建立该策略。例如,一台计算机的管理员可以建立这样一种安全策略:它允许从某一网站下载由指定软件公司签发用以访问计算机上的数据库的所有代码,但不授予对该计算机磁盘的写访问权。

 

强名称程序集和签名工具

可以用两种不同但相互补充的方式对程序集进行签名:使用强名称,或是使用 .NET Framework 1.0 1.1 版中的文件签名工具 (Signcode.exe) 以及 .NET Framework 更高版本中的签名工具 (SignTool.exe)。使用强名称对程序集进行签名将向包含程序集清单的文件添加公钥加密。强名称签名帮助验证名称的唯一性,避免名称欺骗,并在解析引用时向调用方提供某标识。

但是,任何信任级别都不会与一个强名称关联,这样签名工具 (SignTool.exe) 就变得十分重要。签名工具要求发行者向第三方证书颁发机构证实其标识并获取证书,然后此证书将嵌入到您的文件中,并且管理员能够使用该证书来决定是否相信这些代码的真实性。

您可以将强名称和使用签名工具 (SignTool.exe) 创建的数字签名一起提供给程序集,或者您可以单独使用其中之一。签名工具一次只能对一个文件进行签名。对于多文件程序集,您可以对包含程序集清单的文件进行签名。强名称存储在包含程序集清单的文件中,但签名工具 (SignTool.exe) 创建的签名存储在该程序集清单所在的可移植可执行 (PE) 文件中保留的槽中。当您已经具有依赖于签名工具 (SignTool.exe) 生成的签名的信任层次结构或者当您的策略只使用密钥部分并且不检查信任链时,就可以使用通过签名工具 (SignTool.exe) 对程序集进行的签名(带或不带强名称)。

说明:在一个程序集上同时使用强名称和签名工具签名时,必须首先分配强名称。

公共语言运行库还将执行哈希验证;程序集清单包含构成该程序集的所有文件的列表,包括当生成清单时存在的每一文件的散列。在加载每一文件时,其内容被散列化并与清单中存储的哈希值进行比较。 如果两个哈希值不匹配,则无法加载该程序集。

因为强名称和使用签名工具 (SignTool.exe) 进行签名确保了完整性,因此您可以将代码访问安全策略建立在这两种形式的程序集证据的基础上。强名称和使用签名工具 (SignTool.exe) 进行签名通过数字签名和证书来确保完整性。上面提到的所有技术(哈希验证、强名称和使用签名工具 (SignTool.exe) 进行签名)共同作用,可以确保程序集没有做过任何方式的改动。

 

签名工具 (SignTool.exe)

签名工具是一个命令行工具,用于对文件进行数字签名,验证文件或时间戳文件中的签名。

sn [-quiet][option [parameter(s)]]

参数

(略)

备注

签名工具要求本地计算机上安装了 CAPICOM 2.0 可再发行程序。

签名工具的 verify 命令确定签名证书是否由受信任的颁发机构颁发、是否已撤消了签名证书,以及签名证书对于特定策略是否有效(此项可选)。

执行成功时,签名工具返回退出代码 0;执行失败时,签名工具返回退出代码 1;执行完毕并给出警告时,签名证书返回退出代码 2

示例

此命令演示如何使用最佳证书自动对文件进行签名。

signtool sign /a MyFile.exe

 

原文地址

http://msdn.microsoft.com/zh-cn/library/ab4eace3(v=VS.90).aspx
http://msdn.microsoft.com/zh-cn/library/8s9b9yaz(v=VS.90).aspx

posted @ 2011-06-08 14:44  船长&CAP  阅读(272)  评论(0编辑  收藏  举报
免费流量统计软件