【问题标题】:How to include entire certification path when signing code with signtool?使用signtool签署代码时如何包含整个认证路径?
【发布时间】:2011-09-28 08:37:50
【问题描述】:

在使用signtool 对代码进行签名时如何包含整个认证路径?

旧版本的 signtool 会在数字签名中包含整个证书路径。现在如果我用signtool签署一个可执行文件:

signtool.exe" sign /v /f avatar.pfx -t "http://timestamp.verisign.com/scripts/timstamp.dll" app.exe

签名无效:

这是因为没有认证路径:

使用旧版本 signtool 签名的二进制文件运行良好:

我如何告诉 signcode 在签名时包含整个证书路径?

签署二进制文件的正确方法是什么?


更新:SignTool版本6.1.7600.16385

另见

【问题讨论】:

    标签: code-signing


    【解决方案1】:

    验证码签名文档

    • Windows Authenticode 可移植可执行签名格式 (.docx ?)

    表示 PKCS #7 SignedData 结构...

    ...包含签名者证书和任何中间证书,但通常不包含根证书。

    但是,正如我在“DOH!”中发现的那样此刻,signtool.exe 必须能够找到包含它们的证书。

    叶证书在命令行中提供。但是链上剩余证书的识别不包括在哪里可以找到证书。 signtool 确实会检查系统证书存储,因此如果在那里找到它们,它们就会被添加到二进制文件中。如果没有找到,signtool 只会将叶子证书放入已签名的二进制文件中。

    请注意,如果中间证书不在签名二进制文件中,而是在系统的系统证书存储中检查签名,二进制文件仍然会通过验证,因为可以解析链。

    还要注意,从签名二进制文件中排除根是有道理的,因为根必须独立地在系统上检查签名以使其受信任,因此无论如何它都会被忽略。 (在二进制文件中包含根的唯一真正好处是如果有人想手动导入根证书,这几乎总是一个非常糟糕的主意。)

    【讨论】:

      【解决方案2】:

      使用/ac 并传递您的证书所在的.cer 的文件名(对于Verisign,上次我在签署内核代码或其他特殊代码时检查它被称为MSCV-VSClass3.cer)。

      signtool.exe sign /v /f "Avatar.pfx" 
            /ac "Thawte Code Signing CA - G2.cer" 
            -t "http://timestamp.verisign.com/scripts/timstamp.dll" app.exe
      

      这应该由您的 CA 提供。通常,MS 会为其在 Windows 中接受的各种 CA 提供捆绑包。

      见:

      无论哪种方式,据我所知,这仅对内核代码和非常具体的其他东西(例如 Windows 安全中心)是必需的。

      【讨论】:

      • 这是解决 signtool 问题的方法吗?搜索发现没有人这样做。
      • @Ian:我知道这听起来可能很荒谬,但是在 Vista 或 Vista SP1 中首先出现的 signtool 引入了一些变化。从那以后,我们将证书存储在证书存储中,并且运行良好。当然 /ac 仅用于特殊目的。还要确保签名机器上的根证书是最新的。
      • 我在 SO (stackoverflow.com/questions/2814233/…) 上找到了另一个人。他表示他设法创建了一个 PFX,其中包括根证书、中间签名证书、签名证书和私钥。我留下了一条评论,询问他使用什么命令在他的pfx 文件中放置其他证书。我们的证书提供商 Thawte 没有为他们的根证书或中间证书提供其他文件(cer、pfx 或其他文件)。
      • 我一直认为所有证书最终都必须由受信任的根证书签名。 Windows 附带了一些受信任的根证书 - 因此不需要网络访问;它已经在本地机器上。
      • @Ian:奇怪。那么祝那个人好运。是的,也许在本地机器上,但是在启动的最初阶段的驱动程序无权访问证书存储。而且我认为这可能与每隔几年更换一次根证书有关......
      【解决方案3】:

      如果您使用 Thawte,请下载他们的 primaryca.cer

      下载到文件primaryca.cer 并使用:

      signtool sign /f certificate.pfx /p PASSWORD /ac primaryca.cer APP.exe.
      

      应该可以。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-07
        • 2012-04-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-21
        相关资源
        最近更新 更多