Всички 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
Създайте самоподписан сертификат и частен ключ
Създайте директория 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
$ 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
За да сте сигурни, че процедурата е правилна, проверете дали съобщенията са в дневника:
Тестът за подписване завършен
.
иГенерацията на каталога завършена
.
Тестът за подписване не бе успешен.
грешки:
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
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 / задайте тестове за включване
).