Eri*_*ert 33
另外两个答案很好,但还有一点.在"证书"签名和"强名"签名之间很容易混淆.
强名称签名的目的就像Stefan Steinegger所说:让你的客户确定他们正在加载的代码确实正是他们正在加载的代码.这就是所有强大的名字.具体而言,强名称不会在您和您之间建立任何形式的信任关系.如果客户认为他们信任来自您的代码,那么由他们来确定您的代码的正确强名称."关键管理"问题没有以任何方式解决; 客户有责任弄清楚如何知道要信任的密钥.
证书签名,即使用从Verisign或其他认证机构获得的证书进行签名,具有更复杂的目的.证书签名的目的是建立一个经过身份验证的信任和身份链,从认证机构到签署代码的组织.您的客户可能不信任您,您的客户可能甚至没有听说过您,但您的客户可以说"如果Verisign保证此代码作者的身份,那么我会信任他们".由于认证机构为他们承担了这一负担,因此减少了客户的密钥管理问题.
对程序集进行签名是为程序集提供强名称.
首先,让我们做一个重要的区别.在.NET中对程序集进行分类的一种方法如下:
为什么?具有强名称可确保您的程序集是唯一的,并且没有人可以窃取GUID(如在COM中)来创建具有相同名称的不同对象.换句话说,您确保在加载已签名的程序集时,您正在加载您认为正在加载的内容.Eric Lippert 在这里提出了一个很好的答案.
这与可以信任签名程序集的说法不同.为此,程序集可以包含Authenticode,一种数字签名,用于提供有关程序集开发人员/公司的信息.
以下是MSDN的简短版本:
使用SN.EXE创建一个强密钥
sn -k C:\ mykey.snk
从Visual Studio,在项目的"属性"页面上,转到"签名"选项卡,然后选中"签署程序集"以选择刚刚创建的文件

重建你的项目,瞧.您的程序集现已签名.您可以在项目的CSPROJ文件中看到:
Run Code Online (Sandbox Code Playgroud)<PropertyGroup> <SignAssembly>true</SignAssembly> </PropertyGroup> <PropertyGroup> <AssemblyOriginatorKeyFile>mykey.snk</AssemblyOriginatorKeyFile> </PropertyGroup>
该SNK是"强名称密钥"文件.
这意味着给组件一个独特的身份.这样做是为了保证装配来自特定的来源.请参阅MSDN文章强名称程序集.强名称程序集支持并排执行,GAC中的程序集放置,版本控制以及一些其他功能.
最简单的签名方法是在Visual Studio中使用签名选项卡中的项目属性.这实际上在.csproj文件中添加了一个XML条目,该条目告诉构建引擎使用所述密钥文件对程序集进行签名.密钥文件是我们正在讲的这个".snk"文件.它是使用sn.exe .NET工具生成的.它包含签署程序集所需的所有信息.
签名是为了证明程序集是由已知的人或公司创建的,而不是由其他任何人更改.
签署程序集时,会创建一个哈希并使用私钥进行签名.如果更改程序集(例如恶意软件),则可以通过使用公钥(包含在程序集中)检查哈希和签名来轻松查找.
因此,签署组件是为了保护目标系统免受黑客攻击.您可以在.NET配置中关闭签名检查.检查签名符合最终用户的利益.加载程序集时会检查签名.
snk文件包含用于对程序集进行签名的私钥,以及用于检查程序集的公钥.它需要得到保护.如果有人获得了您的私钥,他可以签署汇编,就好像他们签署的那样.
签名的最简单方法是在项目设置中选择snk文件.
| 归档时间: |
|
| 查看次数: |
8349 次 |
| 最近记录: |