【问题标题】:Signing a dll multiple times different certificates?多次签署不同证书的dll?
【发布时间】:2015-09-08 20:13:56
【问题描述】:

我收到了第三方 dll。运行 sn.exe - T name.dll 我得到了公共令牌密钥,所以这告诉我它已签名。

Microsoft (R) .NET Framework 强名称实用程序版本 3.5.30729.1 版权所有 (c) 微软公司。保留所有权利。

公钥令牌是 xXXXxxxXXXX

问题 1。 当我签署自己的 dll 并右键单击选择属性时,我会看到数字签名。在这个 dll 上,我没有看到这个选项卡。为什么?如果它已签名,我应该会看到它。

问题 2。 我有自己的证书,我想用自己的证书签署这个 dll 是否可以?以前的签名会发生什么。你能用多个密钥签署一个dll吗(我想不仅仅是想确认)。

问题 3。 无论出于何种原因,即使它之前已经签署过,我也可以签署这个 dll?当我使用自己的证书对其进行签名时,我会在单击属性时看到它的数字签名选项卡。

不确定这里发生了什么?

【问题讨论】:

    标签: c# code-signing-certificate


    【解决方案1】:

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

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

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

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

    具体回答您的问题:

    1. 参见上面的描述,强名称签名不会显示在“数字签名”选项卡上。如果文件没有 Authenticode 签名,Windows 将不会显示“数字签名”选项卡。
    2. 如果你对它进行强名称签名,你会覆盖旧的,如果你在编译你的程序集并且你的程序集设置为检查强名称签名之后这样做会破坏你的程序,因为它会期待旧的签名。这也可能会破坏使用相同第 3 方 DLL 的其他软件,因为他们期望供应商提供原始签名。

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

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

    【讨论】:

    • 谢谢斯科特。我现在明白了。我正在使用 signtool.exe" 符号来签署 dll 我相信这仅适用于 Authenticode 部分。如果我需要强名称,那么我会使用 sn.exe。
    • 如果我回答了你的问题,请投票并接受答案。
    • 旁注:除了通常会破坏依赖关系之外,重新编译第三方 DLL 以使用新的强名称进行签名可能违反许可协议 - 确保检查是否可以在每个特殊情况。
    • @user1088352 为了解决您在 cmets 中的问题(起初没有看到),是的,signtool.exe 专门用于 Authenticode 签名。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 1970-01-01
    相关资源
    最近更新 更多