【问题标题】:Cross signing an msi or executable. Is there any reason to do so?交叉签名一个 msi 或可执行文件。有什么理由这样做吗?
【发布时间】:2018-08-26 04:31:08
【问题描述】:

https://docs.microsoft.com/en-us/windows-hardware/drivers/install/cross-certificates-for-kernel-mode-code-signing

根据上面的链接,您可以使用您的代码签名证书对内核模型驱动程序进行签名,然后使用交叉签名证书再次对其进行签名。这是内核模式驱动程序所必需的。

问题是,使用交叉签名证书对 exe/msi 包进行签名是否有任何理由/好处?

如果没有任何好处,为什么内核模式驱动程序需要它?它如何使它更安全?

【问题讨论】:

    标签: code-signing code-signing-certificate


    【解决方案1】:

    交叉签名提供了额外的信任级别,这对于内核模式驱动程序很重要。交叉签名提供了额外的信任,因为两个证书颁发机构都不太可能受到损害。

    对于 EXE 和 MSI 而言,交叉签名似乎意味着即使其中一个权限遭到破坏,您的可执行文件仍然可以信任。

    编辑:

    我与此相关的个人经验是使用 Authenticode 签名的程序集以及它们如何加载缓慢(您还没有说您的 EXE 是否是 .NET 程序集)。看这里https://blogs.msdn.microsoft.com/shawnfa/2005/12/13/authenticode-and-assemblies/

    程序集加载性能

    当 CLR 加载具有 Authenticode 签名的程序集时,它 将始终尝试验证该签名。 这与 Windows 加载程序,它将仅验证文件的签名 特定实例,例如文件是 ActiveX 控件时。 这 验证可能非常耗时,因为它可能需要点击 网络多次下载最新证书 撤销清单,并确保有一个完整的链 通往受信任根的有效证书。所以,当一个 Authenticode 签名应用于并非闻所未闻的程序集 在加载该程序集时看到几秒钟的延迟。

    还要注意,优化应用于强命名程序集, 如果程序集是,则不验证强名称签名 从 GAC 加载的内容不适用于 Authenticode 签名。 由于 Authenticode 提供了撤销证书的能力,我们 不能假设因为程序集的 Authenticode 签名是 它在进入 GAC 时有效,每次我们都将保持有效 加载它。

    对我来说,如果您的 EXE 是由 .NET 构建的(即它是一个程序集),那么它所签署的 CA 越多,它的加载速度可能就越慢。如果它不是 .NET 或 ActiveX 控件(或“某些实例”),则不会有延迟。

    【讨论】:

    • 这样做有什么坏处或坏处吗?根据签名的次数,在运行时验证可执行文件的完整性是否需要更长的时间?
    • @rolls 我添加了更多内容来解决这个问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多