15

在我的 Visual Studio 解决方案中,我有一个网站和 4-5 个引用的类库项目。其中一些还引用了外部第三方程序集。

我被赋予了为这些项目签署程序集的任务。

我的理解是,签名的目的是不是每个人都可以在不提供公钥和版本详细信息的情况下使用我们的程序集,对吧?

我应该使用一个强名称密钥 (.snk) 来签署这些项目的所有程序集,还是应该使用单独的强名称密钥对每个程序集进行签名?

强名称密钥的密码保护的目的是什么?

你会怎么做?

非常感谢,

4

2 回答 2

14

签名的目的是不是每个人都可以在不提供公钥和版本详细信息的情况下使用我们的程序集,对吗?

不。签名验证,发布者。它可以防止其他人制作您的程序集的“假”版本。

我应该使用一个强名称密钥 (.snk) 来签署这些项目的所有程序集,还是应该使用单独的强名称密钥对每个程序集进行签名?

关键是您的签名,因此您的所有项目都使用 1。

强名称密钥的密码保护的目的是什么?

整个签名过程取决于您是唯一拥有密钥的人。不涉及证书。部分签名和受保护的密钥可以帮助您限制有权访问密钥的人数。

于 2012-10-31T10:20:26.100 回答
2

强命名程序集的目的是能够区分同一程序集的版本,而不是确定它的创建者。

另一方面,对程序集进行数字签名会标识该程序集的构建者。

两种签名的区别在于第一种不需要使用相同的证书,因为它不会用于识别创建者,只是为了区分同一二进制文件的不同版本。
这样,您将能够在同一进程中加载​​同一程序集的两个版本,从而允许您使用同一类的两个版本而不会发生冲突。

另一个签名称为代码签名,它使用专门设计的证书仅用于代码签名,并将具有通常标识构建者的名称的公共证书与二进制文件捆绑在一起,以及将签名验证到证书颁发机构的证书链,该证书可以在使用 Windows 资源管理器的文件属性中可以看到,第一种情况在 Windows 资源管理器中看不到,它可以使用在 Visual Studio 中创建的自签名证书而没有任何问题。

实际上,数字签名代码适用于所有类型的代码,它不一定是 .NET 程序集,它可以是普通的 Win32 API DLL 或 EXE。

于 2019-01-11T02:41:29.780 回答