3

从 WinXP 开始,我就不再使用 Windows DDK(现在是 WDK),而且我注意到发生了很大的变化。

我正在使用最新的 Win7 DDK开发旧版 NT4 过滤器驱动程序(没有.inf和没有),我的环境是.cat

Windows 7 64bit
Visual Studio 2010
WinDDK v7600.16385.1
VisualDDK plugin for VS (latest version)

我有问题自签名这个驱动程序,因为我仍在开发它我没有(也不知道如何获得)适当的 WHQL 证书,因此我正在遵循我在网上找到的程序。

@echo off

set SIGNTOOL="c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\signtool.exe"
set MAKECERT="c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\makecert.exe"
set PVK2PFX="c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\pvk2pfx.exe"
set CERTPVK="C:\Users\myself\Desktop\testdriver\avtxagent\package\mycompanynametest.pvk"
set CERTPFX="C:\Users\myself\Desktop\testdriver\avtxagent\package\mycompanynametest.pfx"
set CERT="C:\Users\myself\Desktop\testdriver\avtxagent\package\mycompanynametest.cer"
set DRIVER="C:\Users\myself\Desktop\testdriver\avtxagent\package\avtxagent.sys"
set CERTSUBJ="mycompanyname (test)"

del *.cer *.pfx *.pvk
cls
%MAKECERT% -r -n "CN=mycompanyname (test)" -sv %CERTPVK% %CERT%
%PVK2PFX% -pvk %CERTPVK% -spc %CERT% -pfx %CERTPFX%
pause
cls
%SIGNTOOL% sign /v /f %CERTPFX% /t "http://timestamp.verisign.com/scripts/timestamp.dll" %DRIVER%
pause
cls
:: verification
%SIGNTOOL% verify /pa /v %DRIVER%

pause

基本上我正在做的是每次生成证书(我已经尝试过只生成一次证书,仍然是同样的问题),签署我的驱动程序,然后尝试验证签名。在最后一步,验证中,我遇到了问题:

SignTool Error: A certificate chain processed, but terminated in a
                root certificate which is not trusted by the trust provider.

显然,当我尝试以编程方式和使用 sc 安装然后启动旧版驱动程序时,我收到错误消息:

[SC] CreateService SUCCESS
[SC] StartService FAILED 577:

Windows cannot verify the digital signature for this file. A recent hardware or software change might have installed a file that is signed incorrectly or damaged, or that might be malicious software from an unknown source.

如果我按照本指南http://technet.microsoft.com/en-us/library/cc754841.aspx并在受信任的认证中导入证书,则验证过程会顺利进行,但我从 sc 收到相同的错误。

我究竟做错了什么 ?而且,由于文档有点缺乏,有没有人可以解释我必须做什么才能获得在生产环境中使用的适当证书?

4

3 回答 3

1

您不需要 WHQL 签名来签署内核模式驱动程序。您需要的是从 GlobalSign 或 Verisign 购买的代码签名证书(其他人无法使用)。当你有一个时,使用这个代码签名证书来签署你的驱动程序。注意:您还需要包含Microsoft 的交叉证书

或者(仅出于调试目的)您可以在不检查签名的测试模式下加载系统。为此,您需要在系统引导期间按 F8 并在菜单中选择相应的选项。

于 2012-12-19T16:36:32.083 回答
0

这可能是因为您用于生成证书的私有 CA 不受系统信任。这些看起来很相关:

http://technet.microsoft.com/en-us/library/dd441378(office.13).aspx

http://technet.microsoft.com/en-us/library/cc754841.aspx

于 2012-12-19T16:17:25.693 回答
0

您需要将自签名证书作为受信任的根证书颁发机构受信任的发布者安装到本地机器存储中(通常certmgr.msc显示和管理您的用户帐户的存储):

certmgr.exe -add <your.cer> -s -r localMachine ROOT
certmgr.exe -add <your.cer> -s -r localMachine TRUSTEDPUBLISHER

如您所见,这里每次都生成一个新证书是非常不切实际的。您宁愿生成一次然后重用。

(由http://winitpro.ru/index.php/2014/05/08/kak-samostoyatelno-podpisat-drajver-dlya-windows-7/提供;相同效果的说明位于https://technet.microsoft .com/en-us/library/dd919238(v=ws.10).aspx )

于 2017-03-05T01:58:57.227 回答