日期:2014-05-18  浏览次数:20768 次

对.net的程序集签名,大家都有什么高见啊
本人也一直在用,不过一直不解其中原理,主要包含哪些东西

------解决方案--------------------
对程序集签名,也经常称为对程序集赋予一个强名称。

强名称是由程序集的标识加上公钥和数字签名组成的。其中,程序集的标识包括简单文本名称、版本号和区域性信息(如果提供的话)。强名称是使用相应的私钥,通过程序集文件(包含程序集清单的文件,并因而也包含构成该程序集的所有文件的名称和散列)生成的。Microsoft® Visual Studio® .NET 和在 .NET Framework SDK 中提供的其他开发工具能够将强名称分配给一个程序集。强名称相同的程序集应该是相同的。

通过签发具有强名称的程序集,您可以确保名称的全局唯一性。强名称还特别满足以下要求: 

1.> 强名称依赖于唯一的密钥对来确保名称的唯一性。任何人都不会生成与您生成的相同的程序集名称,因为用一个私钥生成的程序集的名称与用其他私钥生成的程序集的名称不相同。

2.> 强名称保护程序集的版本沿袭。强名称可以确保没有人能够生成您的程序集的后续版本。用户可以确信,他们所加载的程序集的版本出自创建该版本(应用程序是用该版本生成的)的同一个发行者。

3.> 强名称提供可靠的完整性检查。通过 .NET Framework 安全检查后,即可确信程序集的内容在生成后未被更改过。但请注意,强名称中或强名称本身并不暗含信任级别,例如由数字签名和支持证书提供的信任。

在引用具有强名称的程序集时,您应该能够从中受益,例如版本控制和命名保护。如果此具有强名称的程序集以后引用了具有简单名称的程序集(后者没有这些好处),则您将失去使用具有强名称的程序集所带来的好处,并依旧会产生 DLL 冲突。因此,具有强名称的程序集只能引用其他具有强名称的程序集。


也就是说,强名称程序集(程序集签名)可以确保你的应用程序加载的程序集是完全正确的,是完全是你期望的那个程序集,绝对不可能被替换掉的。

假设,你一个 C/S 系统中,客户端程序依赖一个 A 程序集,这个程序集提供一个将登录帐号和密码发送到服务器进行验证的方法 M。如果程序集 A 被替换掉,那么,客户端的密码就可能被截取(更改后的方法 A 在发送之前先发送到黑客的服务器上),也有可能客户端根本就不执行验证直接就通过验证(更改后的方法 A 不执行任何操作直接返回 true)。所以你想想如果不使用强名称程序集(程序集签名)后果多可怕。一旦使用了强名称程序集(程序集签名),那么 A 程序集永远是你发行的那个程序集。
------解决方案--------------------
楼上很强。。。
------解决方案--------------------
保证该程序集是由你生成的.别人不能假冒替换掉.安全性.
------解决方案--------------------
简单来说程序集签名的作用应该主要体现在安全性上
2楼说的很全面了
------解决方案--------------------
不明白。关注!
------解决方案--------------------
2楼太强了
------解决方案--------------------
路过学习
------解决方案--------------------
1楼找的真好
------解决方案--------------------
二楼强是因为她不是一个人,,她的照片是两个人。。。

二楼说的好,,为你喊一嗓子,,

一楼问的好。。支持。。
------解决方案--------------------
强名称签名或强命名为软件组件提供他人无法伪造的全局唯一标识。强名称用于保证组件依赖项和配置语句恰好映射到正确的组件和组件版本。


强名称是由程序集的标识(简单文本名称、版本号和区域性信息)加上公钥标记和数字签名组成的

使用强名称的原因:
强命名为某个应用程序或组件提供了唯一标识,其他软件可以使用该标识对相应的应用程序或组件进行显式引用。例如,强命名使应用程序作者和管理员可以指定准确的用于共享组件的维护版本。这使不同的应用程序可以指定不同的版本,而不会影响其他应用程序。此外,还可以使用组件的强名称作为安全证据,以建立两个组件之间的信任关系。
------解决方案--------------------
引用楼主 xinyun80 的帖子:
本人也一直在用,不过一直不解其中原理,主要包含哪些东西

------解决方案--------------------
2楼的很全面
------解决方案--------------------
:)


--