Проблема с подписью 64-битного устаревшего драйвера nt4 для Win7

это было со времен WinXP, я не использую Windows DDK (теперь WDK), и я заметил, что что-то большое изменилось.

Я разрабатываю устаревший драйвер фильтра NT4 (без .inf и без .cat) с последним Win7 DDK, моя среда

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 и импортировать сертификат в Trusted Certification, процесс проверки проходит успешно, но я получаю ту же ошибку от sc.

Что я делаю неправильно ? И кто-нибудь может объяснить, что мне нужно сделать, чтобы получить соответствующий сертификат для использования в производственной среде, поскольку документации не хватает?


person Simone Margaritelli    schedule 19.12.2012    source источник


Ответы (3)


Вам не нужна подпись WHQL, чтобы подписать драйвер режима ядра. Что вам нужно, так это сертификат подписи кода, приобретенный у GlobalSign или Verisign (другие не будут работать). Если он у вас есть, используйте этот сертификат для подписи кода, чтобы подписать драйвер. ПРИМЕЧАНИЕ: вам также необходимо включить кросс-сертификат от Microsoft.

В качестве альтернативы (исключительно в целях отладки) можно загрузить систему в тестовом режиме, в котором подпись не проверяется. Для этого вам нужно нажать F8 во время загрузки системы и выбрать соответствующую опцию в меню.

person Eugene Mayevski 'Callback    schedule 19.12.2012

Вероятно, это связано с тем, что частный ЦС, который вы использовали для создания сертификата, не является доверенным для вашей системы. Эти выглядят актуальными:

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

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

person Dave Swersky    schedule 19.12.2012
comment
просто импортировал файл .cer в ветку доверенных корневых центров сертификации и ничего не изменилось. - person Simone Margaritelli; 19.12.2012
comment
Судя по тому, что я прочитал, ваша система действует как ЦС. CA должен быть доверенным, чтобы сертификаты, которые он генерирует, были доверенными. Вы должны найти способ добавить свой компьютер в качестве собственного доверенного ЦС. - person Dave Swersky; 19.12.2012
comment
с файлом .pfx проверка проходит успешно, но я получаю ту же ошибку от sc - person Simone Margaritelli; 19.12.2012

Вам необходимо установить самозаверяющий сертификат как доверенный корневой центр сертификации и как доверенный издатель в хранилище на локальном компьютере (обычно 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)

person ivan_pozdeev    schedule 05.03.2017