我可以自行签署用户模式 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 个失败的详细信息:
如果我继续使用 /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.
是的,尽管 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
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 个失败的详细信息:
如果我继续使用
/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.
是的,尽管 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