多次签署dll不同的证书?

时间:2015-09-08 20:13:56

标签: c# code-signing-certificate

我收到了第三方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,即使它已经签署了?当我使用自己的证书签名时,当我点击属性时,我会看到它的数字签名选项卡。

不确定这里发生了什么?

1 个答案:

答案 0 :(得分:5)

这里有两套签名,“Strong Name signature”和“Authenticode signature”。

强名称签名是一个特定于.NET的功能,用于证明“我编译的程序集和我在运行时使用的程序集是由同一个人创建的,具有相同的版本号,并且未被修改第三方“。这是您通过sn.exe看到的签名,.NET应用只能有一个强名称签名

Authenticode签名是任何.cab.cat.ctl.dll.exe.ocx文件的一项功能,用于证明“此文件来自此特定来源,未被修改”。这是您在“数字签名”选项卡上看到的签名,可执行文件可以具有多个Authenticode签名,但这种签名并不常见。

.NET没有任何“自动”读取Authenticode,它只检查文件的强名称,如果通过或失败,它将停止签名检查。

具体回答您的问题:

  1. 请参阅上面的说明,强名称登录不会显示在“数字签名”标签上。如果文件没有Authenticode签名,Windows将不会显示“数字签名”选项卡。
  2. 如果您使用强名称签名,则覆盖旧名称,如果您在编译程序集后执行此操作,则会破坏程序,并且您的程序集设置为检查强名称签名,因为它会期望旧的签名。这也可能会破坏使用相同第三方DLL的其他软件,因为它们期望来自供应商的原始签名。

    如果您对Authenticode签名,则将您的签名附加到文件上的Authenticode签名列表中。除非您有自定义代码检查Authenticode签名,否则这不会影响.NET的运行时。

  3. 您正在通过Authenticode对其进行签名,因此您只需将签名附加到Authenticode列表,而不是修改强名称签名。