【问题标题】:Can I self-sign user-mode USB drivers, or do I need to go through Microsoft's Hardware Program?我可以自签名用户模式 ​​USB 驱动程序,还是需要通过 Microsoft 的硬件计划?
【发布时间】:2021-09-10 14:47:33
【问题描述】:

Microsoft 已弃用对内核模式驱动程序的交叉签名根证书的支持:https://knowledge.digicert.com/alerts/Kernel-Mode.html

我偶尔会发布带有 USB 驱动程序的软件(作为一对 .inf.cat 文件)。 到目前为止,我一直在使用 signtool 对它们进行签名,使用:

signtool.exe sign /a /ac $ROOT_CA_CERTIFICATE /tr $TIMESTAMP_SERVICE_URL /td SHA256 $MY_CAT_FILE

并通过以下方式验证:

signtool.exe verify /v /kp $MY_SIGNED_CAT_FILE

根据最近的弃用,这不再有效(详情如下)。 显而易见的替代方案似乎是将我的驱动程序视为内核模式,并通过 Microsoft 的完整资格认证途径——这在几个方面既麻烦又令人望而却步。

考虑到它不需要内核模式,是否有更简单的方法来对我的驱动程序进行自签名?

(我不精通 signtool 和代码签名,所以如果我遗漏了一些明显的东西,请随时告诉我!)


关于我收到的签名/验证失败的详细信息:

  • 如果我继续使用 /ac $ROOT_CA_CERTIFICATE 签名,我会收到以下错误,这似乎是由于交叉证书过期:
    Signtool Error: The provided cross certificate would not be present in the certificate chain.

  • 如果我忽略它,我可以成功签名,但使用/kp 验证失败:
    SignTool Error: Signing Cert does not chain to a Microsoft Root Cert.
    而使用 /kp 参数,我得到了这个失败:
    SignTool Error: A certificate chain processed, but terminated in a root certificate which is not trusted by the trust provider.

【问题讨论】:

    标签: windows code-signing signtool


    【解决方案1】:

    是的,尽管 microsoft 进行了更改,您仍可以签署您的用户模式驱动程序。

    如果验证失败,可能是签名使用了代码签名证书,并且由于 SignTool 默认使用 Windows 驱动程序验证策略,您希望避免它并使用 @ 987654322@ 验证您的文件。

    因此,在您的verify 命令中添加/pa 选项,告诉它使用Default Authentication Verification Policy 而不是 Windows Driver Verification Policy,这意味着它将查看您的证书存储区Microsoft 信任驱动程序的有限 CA 集合中的一个。

    signtool.exe verify /v /pa $MY_SIGNED_CAT_FILE
    

    应该给你一个成功,例如:

    Successfully verified: .\Sources\Driver\usbcom.cat
    Number of files successfully Verified: 1
    Number of warnings: 0
    Number of errors: 0
    

    【讨论】:

    • 谢谢!但是,需要澄清一下——如果 Windows 验证策略验证失败,用户是否能够运行我的驱动程序?
    • 是的,因为它不是 kernel-mode 驱动程序,而是 user-mode 驱动程序。如果您正在签署内核模式驱动程序,那么您必须使用在 the Windows Hardware Dev Center dashboard 上注册的 EV 证书签署您的驱动程序。
    猜你喜欢
    • 2011-12-26
    • 2013-03-16
    • 2010-11-13
    • 2019-12-26
    • 1970-01-01
    • 1970-01-01
    • 2019-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多