签署组件 – 基础知识

签署集会意味着什么? 为什么要这样做?

签署它的最简单方法是什么? 什么是.snk文件?

另外两个答案很好,但还有一点。 在“证书”签名和“强名”签名之间很容易混淆。

强名称签名的目的就像Stefan Steinegger所说:允许您的客户确定他们正在加载的代码确实正是他们正在加载的代码。 这就是所有强名称。 具体而言,强名称不会在您和您之间建立任何forms的信任关系。 如果客户认为他们信任来自您的代码,那么由他们来确定您的代码的正确强名称。 “关键管理”问题没有以任何方式解决; 客户有责任弄清楚如何知道要信任的密钥。

证书签名,即使用从Verisign或其他认证机构获得的证书进行签名,具有更复杂的目的。 证书签名的目的是建立一个经过身份validation的信任和身份链,从认证机构到签署代码的组织。 您的客户可能不信任您,您的客户可能甚至没有听说过您,但您的客户可以说“如果Verisign保证此代码作者的身份,那么我会信任他们”。 由于认证机构为他们承担了这一负担,因此减少了客户的密钥管理问题。

签署集会意味着什么?

对程序集进行签名是为程序集提供强名称。

为什么这样做?

首先,让我们做一个重要的区别。 在.NET中对程序集进行分类的一种方法如下:

  • 私有程序集被隔离以供单个应用程序使用(默认)。 它通常与应用程序位于同一目录中。
  • 共享程序集可由计算机中的所有应用程序全局访问。 它通常在GAC中找到,并且必须签名,即它必须具有强名称(由程序集的名称,版本,公钥和文化组成)。

为什么? 具有强名称可确保您的程序集是唯一的,并且没有人可以窃取GUID(如在COM中)以创建具有相同名称的其他对象。 换句话说,您确保在加载已签名的程序集时,您正在加载您认为正在加载的内容。 Eric Lippert 在这里提出了一个很好的答案。

这与说可以信任签名的程序集不同。 为此,程序集可以包含Authenticode ,一种数字签名,用于提供有关程序集开发人员/公司的信息。

签署它的最简单方法是什么?

以下是MSDN的简短版本:

  1. 使用SN.EXE创建一个强密钥

    sn -k C:\ mykey.snk

  2. 从Visual Studio,在项目的“属性”页面上,转到“签名”选项卡,然后选中“签署程序集”以选择刚刚创建的文件 检查Visual Studio中的标志程序集

  3. 重建你的项目,瞧。 您的程序集现已签名。 您可以在项目的CSPROJ文件中看到:

 true   mykey.snk  
  1. gacutil工具允许您在GAC中管理共享程序集:
    • 安装:gacutil / i myassembly.dll
    • 在GAC中查看程序集:gacutil / l myassembly.dll
    • 卸载:gacutil / u myassembly.dll

什么是.SNK文件?

SNK是“强名称密钥”文件。

签名是为了certificate程序集是由已知的人或公司创建的,而不是由其他任何人更改。

签署程序集时,会创建一个哈希并使用私钥进行签名。 如果更改程序集(例如恶意软件),则可以通过使用公钥(包含在程序集中)检查哈希和签名来轻松查找。

因此,对组件进行签名是为了保护目标系统不被黑客攻击。 您可以在.NET配置中关闭签名检查。 检查签名符合最终用户的利益。 加载程序集时会检查签名。

snk文件包含用于对程序集进行签名的私钥,以及用于检查程序集的公钥。 它需要得到保护。 如果有人获得了您的私钥,他可以签署集会,就像他们签署的那样。

签名的最简单方法是在项目设置中选择snk文件。

这意味着给组件一个独特的身份。 这样做是为了保证组件来自特定的源。 请参阅MSDN文章强名称程序集 。 强名称程序集支持并排执行 , GAC中的程序集放置 , 版本控制以及一些其他function。

最简单的签名方法是在Visual Studio中使用签名选项卡中的项目属性。 这实际上在.csproj文件中添加了一个XML条目,该文件告诉构建引擎使用所述密钥文件对程序集进行签名。 密钥文件是我们正在讲的这个“.snk”文件。 它是使用sn.exe .NET工具生成的。 它包含签署程序集所需的所有信息。