我可以自行签署用户模式 ​​USB 驱动程序,还是需要通过 Microsoft 的硬件程序?

Can I self-sign user-mode USB drivers, or do I need to go through Microsoft's Hardware Program?

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 的完整资格认证途径——这在几个方面都很麻烦且令人望而却步。

有没有更简单的方法来自签名我的驱动程序,因为它不需要内核模式?

(我不太精通签名工具和代码签名,所以如果我遗漏了一些明显的东西,请不要犹豫告诉我!)


关于我收到的 signature/verification 个失败的详细信息:

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

如果验证失败,可能是签名使用了代码签名证书,并且由于 SignTool 默认使用 Windows 驱动程序验证策略,您而是想避免它并使用 Default Authentication Verification Policy 来验证您的文件。

因此,在您的 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