在我的Visual Studio解决方案中,我有一个网站和4-5个类库项目被引用。其中一些也引用了外部第三方程序集。
我被赋予了为这些项目签署程序集的任务。
我的理解是签名的目的是不是每个人都能在不提供公钥和版本细节的情况下使用我们的程序集,对吗?
我应该使用一个强名称密钥(.snk)来签署这些项目的所有程序集,还是应该使用单独的强名称密钥对每个程序集进行签名?
强名称密钥的密码保护目的是什么?
你会怎么做?
非常感谢,
答案 0 :(得分:12)
签名的目的是,并非所有人都能在不提供公钥和版本细节的情况下使用我们的程序集,对吗?
没有。签名验证你,即发布者。它可以防止其他人制作组件的“假”版本。
我应该使用一个强名称密钥(.snk)来签署这些项目的所有程序集,还是应该使用单独的强名称密钥对每个程序集进行签名?
密钥是您的签名,因此请为您的所有项目使用1.
强名称密钥的密码保护目的是什么?
整个签约过程取决于你是唯一拥有钥匙的人。没有涉及证书。部分签名和受保护的密钥可以帮助您限制有权访问密钥的人数。
答案 1 :(得分:1)
强命名程序集的目的是能够区分同一程序集的版本,而不是确定其创建者。
另一方面,对程序集进行数字签名可以标识该程序集的生成者。
两种签名之间的区别在于,第一种签名不需要使用相同的证书,因为它不会被用来识别创建者,而只是用来区分同一二进制文件的不同版本。 br /> 这样,您就可以在同一过程中加载同一程序集的两个版本,从而可以使用同一类的两个版本而不会发生冲突。
另一个签名称为代码签名,它仅将特制证书用于代码签名,并将公共证书与二进制文件捆绑在一起,该公共证书的名称通常标识构建者,并与证书链一起对证书颁发机构进行验证,直至证书颁发机构,可以使用Windows资源管理器在文件属性中看到,第一种情况在Windows资源管理器中看不到,它可以使用在Visual Studio中创建的自签名证书,而不会出现任何问题。
实际上,数字签名代码适用于所有类型的代码,它不必是.NET程序集,也可以是普通的Win32 API DLL或EXE。