我收到了第三方dll。运行sn.exe - T name.dll我得到了公共令牌密钥,所以这告诉我它已签名。
Microsoft(R).NET Framework强名称实用程序版本3.5.30729.1 版权所有(c)Microsoft Corporation。保留所有权利。
公钥令牌是xXXXxxxXXXX
问题1。 当我签署自己的DLL并右键单击选择属性时,我看到数字签名。在这个dll上我没有看到这个标签。为什么?如果签名我应该看到它。
问题2。 我有自己的证书,我想用自己的证书签署这个dll有可能吗?以前的签名会发生什么。你能用多个键签一个dll(我猜不只是想确认)。
问题3。 无论出于何种原因,我可以签署这个dll,即使它已经签署了?当我使用自己的证书签名时,当我点击属性时,我会看到它的数字签名选项卡。
不确定这里发生了什么?
答案 0 :(得分:5)
这里有两套签名,“Strong Name signature”和“Authenticode signature”。
强名称签名是一个特定于.NET的功能,用于证明“我编译的程序集和我在运行时使用的程序集是由同一个人创建的,具有相同的版本号,并且未被修改第三方“。这是您通过sn.exe
看到的签名,.NET应用只能有一个强名称签名
Authenticode签名是任何.cab
,.cat
,.ctl
,.dll
,.exe
或.ocx
文件的一项功能,用于证明“此文件来自此特定来源,未被修改”。这是您在“数字签名”选项卡上看到的签名,可执行文件可以具有多个Authenticode签名,但这种签名并不常见。
.NET没有任何“自动”读取Authenticode,它只检查文件的强名称,如果通过或失败,它将停止签名检查。
具体回答您的问题:
如果您使用强名称签名,则覆盖旧名称,如果您在编译程序集后执行此操作,则会破坏程序,并且您的程序集设置为检查强名称签名,因为它会期望旧的签名。这也可能会破坏使用相同第三方DLL的其他软件,因为它们期望来自供应商的原始签名。
如果您对Authenticode签名,则将您的签名附加到文件上的Authenticode签名列表中。除非您有自定义代码检查Authenticode签名,否则这不会影响.NET的运行时。