Как да подпишете драйвер в Windows x64 10 / 8.1 / 7 с помощта на самоподписан сертификат

Всички 64 битови версии на Windows, започвайки с Windows 7, по подразбиране забраняват инсталирането на драйвери на устройства, които не са подписани с правилния цифров подпис. Неподписаните драйвери са блокирани от операционната система. Наличието на цифров подпис гарантира (до известна степен), че драйверът се освобождава от конкретен разработчик или доставчик и кодът му не е променен след подписването му.

В Windows 10/7 x64 има няколко начина за деактивиране на проверката на цифровия подпис на инсталирания драйвер: използване на групови правила или режим на зареждане на тестовата система (за повече подробности вижте статията Деактивиране на проверката на цифровия подпис за инсталиране на неподписани драйвери на Windows)..

Днес показваме как можете подпишете всеки неподписан драйвер за 64-битната версия Windows 10 или Windows 7.

Да предположим, че имаме драйвер за някакво устройство за x64 Windows 10 или Windows 7, което няма цифров подпис (в нашия пример това ще бъде драйвер за доста стара видеокарта). Архивът на драйверите за нашата версия на Windows (успях да намеря драйвер за Windows Vista x64) бе изтеглен от уебсайта на производителя и съдържанието му беше разопаковано в директорията c: \ tools \ drv1 \. Нека се опитаме да инсталираме драйвера, като го добавим в хранилището на драйвера на Windows, използвайки стандартната програма pnputil.

Pnputil -a "C: \ tools \ drv1 \ xg20gr.inf"

забележка. Тази и всички следващи команди се изпълняват в команден ред, който се изпълнява с права на администратор..

По време на инсталирането си Windows 7 ще покаже предупреждение, че системата не може да провери цифровия подпис на този драйвер.

В Windows 10 такова предупреждение дори не се появява и в конзолата се появява предупреждение, че в INF файла на трета страна няма информация за цифровия подпис.

Когато се опитвате да инсталирате драйвера от Windows Explorer, ако щракнете върху RMB върху файла с драйвера и изберете инсталирам / установят ще се появи грешка:

Третата страна INF не съдържа информация за цифровия подпис.

Трета страна INF не съдържа информация за подписа.

Нека се опитаме да подпишем този драйвер с помощта на самоподписан сертификат.

Съдържание:

  • Помощни програми, необходими за подписване на водач
  • Създайте самоподписан сертификат и частен ключ
  • Генериране на файл с драйвери за CAT
  • Подписваме шофьора със самостоятелно подписан сертификат
  • Инсталиране на сертификат
  • Инсталиране на драйвер, сертифициран със самоподписан сертификат

Помощни програми, необходими за подписване на водач

За да работим, трябва да изтеглим и инсталираме (с настройки по подразбиране) следните инструменти за разработчици на приложения за Windows.

  • Windows SDK (или Microsoft Visual Studio 2005 или по-нова версия) за вашата версия на Windows - тези пакети включват инструментите за подписване на SDK за Windows за Desktop, които включват помощната програма, от която се нуждаем - signtool.exe;
  • Windows Driver Kit 7.1.0 - ISO Image  GRMWDK_EN_7600_1.ISO размера 649 Mb
съвет. В Windows 10 можете да използвате по-нови версии на Windows SDK и Windows Driver Kit. Преди да инсталирате тези инструменти, уверете се, че .NET Framework 4 е инсталиран на вашата система..

Създайте самоподписан сертификат и частен ключ

Създайте директория C: \ DriverCert в корена на диска.

Отворете командния ред и отидете в следната директория:

cd C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v7.1 \ bin

Създайте самоподписан сертификат и издаден частен ключ, да речем, за Winitpro:

makecert -r -sv C: \ DriverCert \ myDrivers.pvk -n CN = "Winitpro" C: \ DriverCert \ MyDrivers.cer

По време на създаването, помощната програма ще ви помоли да посочите парола за ключа, нека бъде P@сс0WRD.

Въз основа на генерирания сертификат създайте публичен ключ за сертификата на издателя на софтуер (PKCS).

cert2spc C: \ DriverCert \ myDrivers.cer C: \ DriverCert \ myDrivers.spc

Комбинирайте публичния ключ (.spc) и частния ключ (.pvk) в един сертификатен файл за обмен на лична информация (.pfx).

pvk2pfx -pvk C: \ DriverCert \ myDrivers.pvk -pi P @ ss0wrd -spc C: \ DriverCert \ myDrivers.spc -pfx C: \ DriverCert \ myDrivers.pfx -po P @ ss0wrd

съвет. Можете да създадете самоподписан сертификат от типа Подписване на код, без да използвате инструменти на трети страни, използвайки командлета PowerShell 5.0 - New-SelfSifgnedCertificate.

$ cert = New-SelfSignedCertificate -Subject "Winitpro" -Type CodeSigningCert -CertStoreLocation cert: \ LocalMachine \ My

След това трябва да експортирате този сертификат в pfx файл с парола:

$ CertPassword = ConvertTo-SecureString -String "P @ ss0wrd" -Force -AsPlainText
Export-PfxCertificate -Cert $ cert -FilePath C: \ DriverCert \ myDrivers.pfx -Password $ CertPassword

съвет. Въпреки че сертификатът има ограничен срок на валидност, изтичането на сертификата CodeSigning означава, че не можете да създавате нови подписи. Валидността на драйвер, който вече е подписан с този сертификат, е неограничен (или старите подписи са валидни за определената времева марка).

Генериране на файл с драйвери за CAT

Създайте директория C: \DriverCert\XG и копирайте в него всички файлове от директорията, в която архивът с драйвера първоначално е разопакован (c: \ tools \ drv1 \). Уверете се, че сред файловете има файлове с разширението .сис и .INF (в нашия случай xg20grp.sys и xg20gr).

Нека да отидем в директорията:

cd C: \ WinDDK \ 7600.16385.1 \ bin \ selfsign

Въз основа на inf файла, използвайки помощната програма inf2cat.exe (включена в комплекта на Windows Driver Kit -WDK), ние ще генерираме файл за котки за нашата платформа (съдържа информация за всички файлове на пакета с драйвери).

inf2cat.exe / драйвер: "C: \ DriverCert \ xg" / os: 7_X64 / verbose

За да сте сигурни, че процедурата е правилна, проверете дали съобщенията са в дневника:

Тестът за подписване завършен.
и
Генерацията на каталога завършена.

съвет. В моя случай командата Inf2Cat.exe върна грешка:

Тестът за подписване не бе успешен.

грешки:

22.9.7: DriverVer е зададен на неправилна дата (трябва да бъде отложено до 4/21/2009 за най-новата ОС) в \ hdx861a.inf

За да коригирате грешката, в секцията [Версия] намерете реда с DriverVer = и го заменете с:

DriverVer = 05/01 / 2009,9.9.9.9.9

След изпълнение на командата файлът g20gr.cat трябва да бъде актуализиран в директорията на драйверите

Подписваме шофьора със самостоятелно подписан сертификат

Отидете в директорията:

cd "C: \ програмни файлове (x86) \ комплекти за Windows \ 10 \ bin \ 10.0.17134.0 \ x64"

Ще подпишем набора от файлове с драйвери със създадения от нас сертификат, като услуга за отпечатване на време (времева марка) ще използваме ресурса Globalsign. Следващата команда ще подпише цифрово CAT файла с помощта на сертификат, съхраняван в защитен с парола PFX файл.

signntool знак / f C: \ DriverCert \ myDrivers.pfx / p P @ ss0wrd / t http://timestamp.globalsign.com/scripts/timstamp.dll / v „C: \ DriverCert \ xg \ xg20gr.cat“

Ако файлът е подписан успешно, трябва да се появи следното:

Успешно подписан: C: \ DriverCert \ xg \ xg20gr.cat
Брой успешно подписани файлове: 1

забележка. Драйверът е цифрово подписан във .cat файла, на който се позовава файлът с драйвери .inf. Използвайки следната команда, можете да проверите цифровия подпис на драйвера във файла cat:

SignTool провери / v / pa c: \ DriverCert \ xg \ xg20gr.cat

Лидо във свойства на файлове в раздела Цифрови подписи.

Файлът CAT съдържа цифрови подписи (отпечатъци) на всички файлове, които са в директорията на драйверите (файлове, които са изброени във файла INF в секцията CopyFiles). Ако някой от тези файлове е променен, контролната сума на файловете няма да съвпада с данните във файла CAT, в резултат на това инсталирането на такъв драйвер ще се провали.

Инсталиране на сертификат

защото сертификатът, който създадохме, се самоподписва, системата не му вярва по подразбиране. Добавете нашия сертификат към местния магазин на сертификати. Това може да стане с помощта на командите:

certmgr.exe -add C: \ DriverCert \ myDrivers.cer -s -r localМашинен корен
certmgr.exe -add C: \ DriverCert \ myDrivers.cer -s -r localМашина TRUSTEDPUBLISHER

Или от графичния съветник за добавяне на сертификати (сертификатът трябва да бъде поставен в хранилището Trusted Издателите и Trusted корен сертифициране Властите местна машина). В даден домейн можете да разпространявате този сертификат до работни станции, като използвате груповата политика.

забележка. Можете да проверите наличието на сертификата, който създадохме в доверени, като отворите щракването за управление на сертификата (certmgr.msc) и проверите присъствието на сертификата, който създадохме (издаден за winitpro) в съответните хранилища.

забележка. При проверка на хранилището на сертификати с помощта на помощната програма Sigcheck, този сертификат ще бъде показан като ненадежден, защото той не е в списъка със списъка на сертификатите за root на Microsoft (този списък трябва да се актуализира периодично).

Инсталиране на драйвер, сертифициран със самоподписан сертификат

Нека се опитаме да инсталираме драйвера, който подписахме отново, като стартираме командата:

Pnputil -i -a C: \ DriverCert \ xg20 \ xg20gr.inf

Сега, по време на инсталирането на драйвера, прозорец с предупреждение за липсващия цифров подпис на драйвера няма да се появи.

Успешно е инсталиран драйверът на устройство в системата.
Пакетът с драйвери е добавен успешно.

В Windows 7 се появява това предупреждение. за това дали сте сигурни, че искате да инсталирате този драйвер (в Windows 10 x64 1803 такъв изскачащ прозорец не се появява). Като кликнете върху „инсталирам", инсталирате драйвера в системата.

Ако по някаква причина драйверът не е инсталиран, във файла се съдържа подробен дневник за инсталиране на драйвери C: \ Windows\ инф\ setupapi.Дев.дневник. Този дневник ще ви позволи да получите по-подробна информация за грешката при инсталирането. В повечето случаи възниква грешката „Пакетът на драйвери не е потвърден за проверка на подписа“ - най-вероятно това означава, че сертификатът на водача не е добавен към надеждните сертификати.

Ако инсталацията на драйвера беше успешна, следните файлове ще се появят във файла setupapi.dev.log:

>>> [Инсталиране на устройство (DiInstallDriver) - C: \ WINDOWS \ System32 \ DriverStore \ FileRepository \ xg20gr.inf_amd64_c5955181485ee80a \ xg20gr.inf] >>> Начало на раздела 2018/07/22 23: 32: 57.015 cmd: Pnputil -i ac: \ DriverCert \ xg \ xg20gr.inf ndv: Флагове: 0x00000000 ndv: INF път: C: \ WINDOWS \ System32 \ DriverStore \ FileRepository \ xg20gr.inf_amd64_c5955181485ee80a \ xg20gr.inf inf: SetupCoN DriverStore \ FileRepository \ xg20gr.inf_amd64_c5955181485ee80a \ xg20gr.inf 23: 32: 57,046 INF: Copy стил: 0x00000000 INF: Да се ​​съхранява на драйвери на пътя: C: \ Windows \ System32 \ DriverStore \ FileRepository \ xg20gr.inf_amd64_c5955181485ee80a \ xg20gr.inf INF: Публикуван Inf Path: C: \ WINDOWS \ INF \ oem23.inf inf: SetupCopyOEMInf изход (0x00000000) 23: 32: 57.077 <<<  Section end 2018/07/22 23:32:57.155 <<<  [Exit status: SUCCESS]

Както можете да видите, за да инсталираме самоподписания драйвер, ние дори не трябваше да деактивираме проверката на цифровия подпис на драйвери с помощта на bcdedit.exe, както е описано тук (команди bcdedit.exe / set loadoptions DISABLE_INTEGRITY_CHECKS и bcdedit.exe / задайте тестове за включване).