Win7 64bit传统nt4驱动程序签名问题

时间:2012-12-19 16:11:14

标签: digital-signature windows-7-x64 wdk

自从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得到了同样的错误。

我做错了什么?而且,是否有人可以解释我必须做些什么来获得在生产环境中使用的适当证书,因为文档有点缺乏?

3 个答案:

答案 0 :(得分:1)

您不需要WHQL签名来签署内核模式驱动程序。您需要的是从GlobalSign或Verisign购买的代码签名证书(其他人无法使用)。如果有,请使用此代码签名证书对驱动程序进行签名。注意:您还需要包含cross-certificate from Microsoft

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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分: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