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