【发布时间】:2012-06-13 14:32:09
【问题描述】:
在签署我的内核模式驱动程序并为其创建服务时遇到了一些麻烦。
所以,我使用 makecert 创建了一个自签名证书:
makecert -r -pe -n "CN=XXX" -ss "XXX" -sr LocalMachine
然后我使用证书管理插件将证书导出到 .pfx 文件并使用 signtool 对 .sys 驱动程序进行签名:
signtool 签名 /f myCert.pfx /p xxx /t http://timestamp.comodoca.com/authenticodedriver.sys
这是成功的。使用signtool验证后,收到:
验证:driver.sys 文件哈希(sha1):9A...7F
Signing Certificate Chain:
Issued to: XXX
Issued by: xxx
Expires: Sat Dec 31 16:59:59 2039
SHA1 hash: 12...46
The signature is timestamped: Sun Jun 10 03:35:21 2012
Timestamp Verified by:
Issued to: UTN-USERFirst-Object
Issued by: UTN-USERFirst-Object
Expires: Tue Jul 09 11:40:36 2019
SHA1 hash: E1...46
Issued to: COMODO Time Stamping Signer
Issued by: UTN-USERFirst-Object
Expires: Sun May 10 16:59:59 2015
SHA1 hash: 3D...C8
Successfully verified: driver.sys
Number of files successfully Verified: 1
Number of warnings: 0
Number of errors: 0
但是,当我尝试为其创建服务时:
sc 创建 ncd binPath= C:\Windows\System32\drivers\driver.sys type= 内核
(binpath 已验证存在),服务已创建,但大约 10-20 秒后,“程序兼容性助手”出现,并带有烦人的“Windows 需要数字签名驱动程序”对话框。
什么给了?它被证明是签名的。我已经尝试了该过程三遍,但没有成功。我已经尝试启动该服务,但我得到一个带有 BC 代码的 BSOD,该代码涉及此问题(未签名的驱动程序在 XP/32 位 7 上工作得很好)。
【问题讨论】:
-
自签名是不够的;它还需要与仅支持真实 CA 证书的 Microsoft 证书交叉签名。出于测试目的,您可以启用test signing。
-
@Luke 好吧,我想通了 - 我处于测试签名模式,它工作正常。但是,我找到了交叉签名证书列表,但我不确定如何使用它们。我有带有 .cer 和指纹 sha1 的 zip 文件,但证书管理器要求提供 URL。
-
我不知道确切的过程,但您必须 1) 使用受支持的 CA 证书(VeriSign 等)签署您的二进制文件,然后 2) 使用相应的交叉签名您的二进制文件微软提供的签名证书。
-
@Luke 你能回答一下吗?这似乎是个问题。
标签: windows windows-services driver wdk driver-signing