Windows 10, 8.1 и Windows 7 позволяют отключить обязательную проверку цифровой подписи драйверов и установить неподписанный драйвер, однако если в последних версиях ОС это нужно сделать на постоянной основе, изменение опций с помощью bcdedit не помогает. Однако, может помочь самостоятельная подпись драйвера и его последующая установка, о чем и поговорим.
В этой инструкции подробно о том, как самостоятельно подписать драйвер для Windows 10, 8.1 или Windows 7 x64 или 32-бит (x86) для последующей установки в системе на постоянной основе без отключения проверки цифровой подписи драйверов, избежав при этом ошибок наподобие «INF стороннего производителя не содержит информации о подписи».
Что потребуется для подписи драйвера
Для того, чтобы выполнить все описанные далее шаги, скачайте и установите следующие инструменты с сайта Майкрософт:
- Microsoft Windows SDK for Windows 7 https://www.microsoft.com/en-us/download/details.aspx?id=8279
- Windows Driver Kit 7.1.0 https://www.microsoft.com/en-us/download/details.aspx?id=11800
Из первого набора достаточно будет установить Tools, из второго (представляет собой ISO-образ с установщиком, с которого нужно запустить KitSetup.exe) — выбрать Build Environments и Tools.
Обратите внимание: это не последние версии наборов инструментов, но они в равной степени подойдут для самостоятельной подписи драйверов для последующей установки во всех ОС от Windows 10 до Windows 7, при этом в инструкции не потребуется вдаваться в некоторые дополнительные нюансы.
Процесс самостоятельной подписи драйвера
В процессе для того, чтобы подписать драйвер самостоятельно, нам потребуется: создать сертификат, подписать драйвер этим сертификатом, установить сертификат в системе и установить драйвер. Начнем.
- Создайте в корне диска C какую-либо папку (так к ней проще будет обращаться в дальнейшем), например, C:\cert, где мы будем работать с сертификатами и драйверами.
- Запустите командную строку от имени администратора (нужны для 18-го шага). Далее используем следующие команды по порядку. Файлы драйвера пока не потребуются. Во время выполнения второй команды вас попросят ввести пароль, я использую password в окне запроса и далее в командах, вы можете использовать свой.
-
cd "C:\Program Files\Microsoft SDKs\Windows\v7.1\bin"
-
makecert -r -sv C:\cert\driver.pvk -n CN="remontka" C:\cert\driver.cer
-
cert2spc C:\cert\driver.cer C:\cert\driver.spc
-
pvk2pfx -pvk C:\cert\driver.pvk -pi password -spc C:\cert\driver.spc -pfx C:\cert\driver.pfx -po password
- До этого этапа всё должно пройти как на скриншоте ниже, командную строку не закрываем.
- В папке C:\cert создайте вложенную папку, например, drv и поместите туда свои файлы драйвера. Но: если вам требуется драйвер только для x64, не копируйте .inf файл для x86 систем в эту папку и наоборот.
В командной строке используем следующие команды:
-
cd C:\WinDDK\7600.16385.1\bin\selfsign\
-
inf2cat.exe /driver:"C:\cert\drv" /os:7_X64 /verbose
- В предыдущей команде для драйвера 32-бит укажите X86 вместо X64. Если будет предложено скачать .NET Framework, согласитесь, установите, а затем заново выполните команду. В идеале вы должны будете получить сообщение об успешном создании .cat файла для подписи. Однако, возможны ошибки, о наиболее частых — следующие два пункта. После исправления ошибок повторите команду из пункта 10.
- DriverVer set to incorrect date — возникает при дате в файле драйвера до 21 апреля 2009 года. Решение: откройте файл .inf из папки drv в текстовом редакторе (можно в блокноте) и в строке DriverVer установите другую дату (формат: месяц/день/год).
- Missing AMD64 CatalogFile entry (для 64-бит) или Missing 32-bit CatalogFile entry. Решение: откройте файл .inf из папки drv в текстовом редакторе и в разделе [Version] добавьте строку CatalogFile=catalog.cat
- В итоге вы должны получить сообщение: Catalog generation complete с указанием пути к файлу каталога, в моем случае – C:\cert\drv\catalog.cat. Далее используем следующие команды (требуется подключение к Интернету).
-
cd "C:\Program Files\Microsoft SDKs\Windows\v7.1\bin"
-
signtool sign /f C:\cert\driver.pfx /p password /t http://timestamp.verisign.com/scripts/timestamp.dll /v C:\cert\drv\catalog.cat
- Результат подписи файла драйвера без ошибок на скриншоте ниже. Следующий шаг — добавить самоподписанный сертификат в список доверенных в системе, сделать это можно следующими двумя командами по порядку
-
certmgr.exe -add C:\cert\driver.cer -s -r localMachine ROOT certmgr.exe -add C:\cert\driver.cer -s -r localMachine TRUSTEDPUBLISHER
- В результате вы должны получить сообщение «CertMgr Succeeded». Если Failed или certmgr.exe не является внутренней или внешней командой — убедитесь, что командная строка запущена от имени администратора, а вы находитесь в нужной папке (см. 15 шаг).
И вот теперь можно закрыть командную строку и установить драйвер из папки C:\cert\drv с помощью диспетчера устройств, или нажав правой кнопкой по .inf файлу и выбрав пункт «Установить». Потребуется подтвердить установку драйвера в окне «Не удалось проверить издателя этих драйверов» — нажать «Все равно установить этот драйвер».
Обратите внимание, что возможные ошибки в диспетчере устройств, отображаемые для устройства с самостоятельно подписанным драйвером обычно не имеют отношения непосредственно к процессу подписи (та же ошибка для них будет появляться и без подписи, при простом отключении проверки цифровой подписи драйверов в особых вариантах загрузки). Т.е. искать причину в этом случае нужно в чем-то ещё и читать подробную инструкцию по использованию драйвера (например, в случае драйверов для FlashTool).
Зайти через соцсеть (если нет соцсети, пишите на kaz4858@mail.ru)
-
Андрей
- Архитектор
- Сообщения: 7970
- Зарегистрирован: 06 май 2015, 14:10
- Откуда: Чехов, МО
- Благодарил (а): 767 раз
- Поблагодарили: 501 раз
- Контактная информация:
Подписание драйверов в W7 x64 (решено)
До сих пор однозначно не решённый вопрос. Эти выходные посвящу его решению.
Задача. Подписать неподписанный драйвер, чтобы он работал в Win 7 x64. Не использовать патчи системных файлов винды, кнопку F8 при загрузке, или тестовый (TESTSIGNING ON) режим.
Дополнение: работа драйвера требуется только на ОДНОЙ КОНКРЕТНОЙ машине.
Варианты решения: подписание цепочкой сертификатов (в этом надо разобраться).
-
Андрей
- Архитектор
- Сообщения: 7970
- Зарегистрирован: 06 май 2015, 14:10
- Откуда: Чехов, МО
- Благодарил (а): 767 раз
- Поблагодарили: 501 раз
- Контактная информация:
Re: Вопрос по подписанию драйверов в W7 x64
Сообщение
Андрей »
Хабр писал(а):«Расскажите, будьте так добры, как запустить самоподписанный драйвер, не активируя тестовый режим (т.е. не используя команду bcdedit.exe /set testsigning on, которая помимо включения режима доверия к самоподписанным драйверам заодно отключает некоторые функции по управлению цифровым контентом).
Для информации: сделать доверенным свой сертификат невозможно, т.к. его для этого требуется подписать кросс-сертификатом от MS или чьим-нибудь ещё, чтобы выстроилась цепочка сертификатов. Даже если принудительно добавите сертификат в качестве корневого, при попытке использовать его для драйверов система пошлёт Вас куда подальше (несмотря на то, что в свойствах драйвера будет говориться, что сертификат совершенно валиден).»«То что сделать свой сертификат доверенным невозможно — это вы уже очевидную ерунду говорите. Это же ваш компьютер в конце концов Любой админ поднимавший свой CA это знает и для этого не надо быть низкоуровневым разработчиком.
Вам нужно добавить корневой сертификат CA в TRCA, и скорее всего еще нужен сертификат которым производилась подпись (или достаточно опять сертификата CA) в Trusted Publishers.
Всё это разумеется надо делать в хранилище сертификатов компьютера, а не пользователя.
Я, честно говоря, действительно не загружал таким образом самоподписанные драйверы самостоятельно (я не разработчик, обычно использую PKI для других целей), но мнению того MVP который мне об этом сообщал, склонен доверять, тем более что его компания использует (или использовала) такой подход для своего ПО.»«Да, я лично это попробовал, причём первым же делом, как только столкнулся с проблемой необходимости наличия ЦП у драйверов. Если просто подписать драйвер сгенерированной тестовой подписью, то винда говорит, что подпись невалидна, и драйвер не грузит. Если добавить свой сертификат в корневое хранилище, то винда утверждает, что подпись полноценная, доверенная, и вообще вся из себя самая что ни на есть настоящая, но несмотря на это запускать драйвер по-прежнему упорно отказывается.»
«Я не увидел у вас в ответе подтверждений что вы делали именно как я сказал, так что извините, но некоторые вопросы задам снова:
Как генерировали сертификаты?
Какие опции включены в Key Usage у подписывающего сертификата?
Точно ли все операции производились с хранилищем компьютера, а не пользователя?
В TRCA надо добавлять сертификат с публичным ключом CA, а не тот которым подписываем драйвер. Так и делали?
В TP надо добавлять либо сертификат с публичным ключом CA, либо непосредственно тот которым подписываем. Не уверен, так что для эксперимента лучше добавить оба.»
-
Андрей
- Архитектор
- Сообщения: 7970
- Зарегистрирован: 06 май 2015, 14:10
- Откуда: Чехов, МО
- Благодарил (а): 767 раз
- Поблагодарили: 501 раз
- Контактная информация:
Re: Вопрос по подписанию драйверов в W7 x64
Сообщение
Андрей »
reverse4you.org писал(а):Цепочка сертификатов должна уходить рутом в доверенный сертификат МС (для этого и нужен кросс-сертификат при подписи релизной версии). Список паблик ключей доверенных корневых сертификатов жестко прибит гвоздями внутри ci.dll. Так что наиболее реалистичный вариант — купить самый дешевый сертификат
-
Андрей
- Архитектор
- Сообщения: 7970
- Зарегистрирован: 06 май 2015, 14:10
- Откуда: Чехов, МО
- Благодарил (а): 767 раз
- Поблагодарили: 501 раз
- Контактная информация:
Re: Вопрос по подписанию драйверов в W7 x64
Сообщение
Андрей »
Цепочка сертификатов должна уходить рутом в доверенный сертификат МС
что еще за доверенный сертификат МС? Чем он отличается от любого другого?
Список паблик ключей доверенных корневых сертификатов жестко прибит гвоздями внутри ci.dll
Да, в этой библиотеке содержится список доверенных корневых сертификатов различных издателей, именно из него Windows получает информацию о том кому доверять сразу после установки. И? Это не значит что в список доверенных сертификатов нельзя добавить свой корневой сертификат после установки, с помощью обычной оснастки.
Короче говоря, рассказываю секретную тонкость, подозреваю может быть кому-то не известна:
Проверяйте сами, не доверяйте профессионалам (мне тоже). У вас не получается, а у остальных получается? Разбирайтесь, ищите в чем дело, спрашивайте (приводя условия и результаты эксперимента).
Я вот увидел у вас ссылку с подтверждением что это работает, и довод кого-то, что нет, и насколько я понимаю вы сами даже не пробовали. Я знаю что самоподписанный сертификат прекрасно добавляется в доверенные (я сам это неоднократно проверял). Я знаю что в сертификатах нет флага «ЭтоСертификатМС» (я сам смотрел). Я не вижу никаких причин почему подписывать драйверы своим сертификатом невозможно. Даже наоборот, я вижу кучу подтверждений что это возможно.
Курсивом — товарищ с хабра.
-
Андрей
- Архитектор
- Сообщения: 7970
- Зарегистрирован: 06 май 2015, 14:10
- Откуда: Чехов, МО
- Благодарил (а): 767 раз
- Поблагодарили: 501 раз
- Контактная информация:
Re: Подписание драйверов в W7 x64 (решено)
Сообщение
Андрей »
Был получен ответ ещё от одного эксперта
Олег Казакевич:
Для того, чтобы драйвер был загружен на Vista-64 и выше, а также на
Windows 8 и выше в режиме Secure Boot, вне тестовых режимов и т.п.,
он должен быть подписан, причем в подписи обязательно должен быть
соответствующий кросс-сертификат от Microsoft. Таких кросс-сертификатов
существует всего порядка 20, каждый для конкретной конторы, которая
продает сертификаты — Symantec, Thawte, GlobalSign, DigiCert и т.п.
Если у вас самопальный сертификат, созданный каким-нибудь makecert.exe,
то к нему просто не существует кросса. И система такой драйвер загружать не будет.
Существует лишь 4 легальных способа загрузки драйвера на обозначенных системах:
1) Подписать драйвер настоящим сертификатом, купленным у одной из организаций типа Symantec
(с кросс-сертификатом)
2) Загружать систему в тестовом режиме, используя самопальный сертификат.
3) Нажимать при загрузке F8 и отключать проверку цифровых подписей.
4) Перевести систему в режим отладки и загружать ее с подключенным отладчиком ядра (например, WinDBG).
Других путей нет (ну если только не считать всякие там патчи ядра, уязвимости и т.п.).
-
Андрей
- Архитектор
- Сообщения: 7970
- Зарегистрирован: 06 май 2015, 14:10
- Откуда: Чехов, МО
- Благодарил (а): 767 раз
- Поблагодарили: 501 раз
- Контактная информация:
Re: Вопрос по подписанию драйверов в W7 x64
Сообщение
Андрей »
xaegr писал(а):«То что сделать свой сертификат доверенным невозможно — это вы уже очевидную ерунду говорите. Это же ваш компьютер в конце концов Любой админ поднимавший свой CA это знает и для этого не надо быть низкоуровневым разработчиком.
Вам нужно добавить корневой сертификат CA в TRCA, и скорее всего еще нужен сертификат которым производилась подпись (или достаточно опять сертификата CA) в Trusted Publishers.
Всё это разумеется надо делать в хранилище сертификатов компьютера, а не пользователя.
Я, честно говоря, действительно не загружал таким образом самоподписанные драйверы самостоятельно (я не разработчик, обычно использую PKI для других целей), но мнению того MVP который мне об этом сообщал, склонен доверять, тем более что его компания использует (или использовала) такой подход для своего ПО.»
Товарищ с Хабра перепутал разные типы сертификатов: для SSL (валидности сайта) и code signing. Требования ко второму выше. (Слышал звон, да не знает, где он.) А компания, на которую он ссылается, видимо работает как раз с сертификатами первого типа.
автор статьи: Nizaury v.1.82
Многие из нас сталкивались с проблемой установки неподписанного драйвера. Например, необходимо поставить драйвер какой-либо программы, но ее
драйвер не устанавливается, ибо у него нет цифровой подписи.
В качестве решения Вы можете либо отключить проверку подписи, либо попытаться самостоятельно добавить к нему подпись.
Если Вам необходимо поработать с программой, устанавливающий свой драйвер без перезагрузки системы, то Вы можете загрузиться в специальный режим Windows.
1) Сразу после включения компьютера нажмите F8. Далее вы попадете либо в меню выбора режимов загрузки Windows, либо в меню выбора диска для загрузки.
2) Нам нужен меню выбора режимов загрузки, поэтому если Вы попали в меню выбора дисков, то выберите диск на котором установлена Ваша Windows и нажмите Enter, а затем быстро нажмите F8 до начала запуска Windows и окажитесь там, где нам нужно.
3) Выберите пункт Отключение обязательной проверки подписи драйверов (Disable Driver Signature Enforcement) и нажмите Enter
Вы загрузитесь в специальный режим Windows, на котором будет только отключена проверка подписи, а все остальные функции будут работать в обычном режиме. После перезагрузки компьютера Вы вернетесь обратно в обычный режим с проверкой драйверов.
Иногда при установке драйвера в этом режиме система может выдать сообщение, что драйвер не подписан, просто закройте его и система нормально установит драйвер.
Чтобы самостоятельно подписать драйвер Вам понадобиться программа Driver Signature Enforcement Overrider (DSEO). Она позволяет создавать свои собственные непроверенные свидетельства. Для нормальной работы программы Контроль учетных записей (User Account Control (UAC)) должен быть выключен.
http://www.ngohq.com/home.php?page=dseo
http://file.qip.ru/file/106388498/310818d6/dseo13b.html
1) Запускаете программу и нажимаете Next, а затем Next
2) Выбираете пункт «Enable Test Mode» и нажимаете Next
3) Выбираете пункт «Sign a System File» и нажимаете Next
4) Указываете имя Вашего файла, включая путь к нему и нажимаете Next
Например, если файл драйвера InetLock.sys расположен в каталоге C:\Windows\System32\Drivers, то вам необходимо указать C:\Windows\System32\Drivers\InetLock.sys. В случае если необходимо подписать несколько файлов, то просто повторите эту процедуру несколько раз.
5) Перезапускаете компьютер
6) Устанавливаете необходимый Вам драйвер и пользуетесь им.
Иногда на рабочем столе возле часов может появиться маленькая надпись, сообщающая версию сборки операционной системы и тот факт, что Вы работаете в тестовом режиме. Для убирания данной надписи используйте рекомендации из совета 6 в «Тонких настройках».
Данный режим также как и описанный в предыдущем варианте является штатным методом, предусмотренным Microsoft для тестирования разработчиками новых версий своих драйверов.
Отключить тестовый режим Вы можете просто запустив программу, выбрав пункт «Disable Test Mode» и нажав Next.
Плюсы данных методов в том, что они не изменяют загрузчик системы или какие-либо её системные файлы.
Также Вы можете скачать и установить программу ReadyDriverPlus
http://file.qip.ru/file/118399038/d5a76d96/SetupReadyDriverPlus.html
она добавит небольшое изменение в загрузчик, которое автоматизмрует процесс выбора Вами пункта Отключение обязательной проверки подписи драйверов (Disable Driver Signature Enforcement) при загрузке.
При правильном указании загрузочной папки Boot, данная программа будет работать у большинства пользователей. В программе ReadyDriverPlus на этапе выбора пути к папке Boot, по умолчанию, указан путь C:\Boot. Так как папка Boot с загрузочными файлами Windows 7 может располагаться не только на диске С:\ , то прежде чем продолжить установку ReadyDriverPlus выясните, где у Вас находится папка Boot.
Папка Boot может располагаться (рекомендации по нахождению):
1) На том же разделе, где у Вас установлена Windows 7
1.1) Откройте Проводник -> Компьютер -> Локальный диск (C:)
1.2) В Панели меню выберите Сервис -> Параметры папок
1.3) Уберите флажок со значения Скрывать защищенные системные файлы
1.4) Установите переключатель в значение Показывать скрытые файлы, папки и диски
1.5) Смотрите в Проводнике, если у Вас появилась скрытая папка Boot, то спокойно продолжайте установку программы ReadyDriverPlus, если данной папки у Вас нет, то читайте о другом месте нахождения папки Boot.
2) На скрытом разделе 100 мегабайт (присвойте ему букву, для его выбора)
2.1) Откройте в меню Пуск диалоговое меню Выполнить или нажмите Win+R
2.2) Введите diskmgmt.msc
2.3) Найдите раздел размером 100 мегабайт. Если у Вас его нет, то читайте о другом местенахождения папки Boot.
2.4) Так как данный раздел скрыт, то нам для указания его необходимо сделать его видимым. Для этого щелкните на нем правой кнопкой мыши и выберите пункт Изменить букву диска или путь к диску, затем Изменить, назначьте букву(Например: Z) и нажите OK
2.5) Откройте Проводник -> Компьютер -> Локальный диск (буква диска, в нашем примере Z:)
2.6) Если у Вас появилась скрытая папка Boot, то спокойно продолжайте установку программы ReadyDriverPlus, если данной папки у Вас нет, то читайте о другом месте нахождения папки Boot.
После установки программы ReadyDriverPlus снова пройдите в меню Изменить букву диска или путь к диску, но только выберите пункт Удалить, тем самым Вы сделаете его снова Скрытым
3) На крайнем слева разделе, от того на который установлена Ваша Windows
3.1) Откройте в меню Пуск диалоговое меню Выполнить или нажмите Win+R
3.2) Введите diskmgmt.msc
3.3) Найдите крайний слева раздел, от того на который установлена Ваша Windows
3.4) Если он является активным, то запомните его букву, если он не является активным, то читайте о другом месте нахождения папки Boot.
3.5) Откройте Проводник -> Компьютер -> Локальный диск (буква диска)
3.6) Если у Вас появилась скрытая папка Boot, то спокойно продолжайте установку программы ReadyDriverPlus, если данной папки у Вас нет, то читайте о другом местенахождения папки Boot.
4) На другом, являющимся активным разделе жестком диска.
4.1) Откройте в меню Пуск диалоговое меню Выполнить или нажмите Win+R
4.2) Введите diskmgmt.msc
4.3) Найдите раздел жесткого диска являющийся активным
4.4) Запомните его букву
4.5) Откройте Проводник -> Компьютер -> Локальный диск (буква диска)
4.6) Если у Вас появилась скрытая папка Boot, то спокойно продолжайте установку программы ReadyDriverPlus, если данной папки у Вас нет, то читайте о другом месте нахождения папки Boot.
При установке программы ReadyDriverPlus, на этапе выбора пути к папке Boot, укажите путь к диску, где мы её обнаружили (Например: Z:\Boot или D:\Boot). После установки программы ReadyDriverPlus перезагрузитесь.
В процессе загрузки система даст Вам три секунды для выбора варианта загрузки: обычного или без проверки подписи. Если Вы не будете выбирать обычный режим, то система сама постоянно будет загружать Вас в режим без проверки подписей.
Как известно в х64 битных платформах была введена процедура обязательной цифровой подписи всего того, что может попасть в ядро системы, а именно драйверов. О том, на сколько это эффективно и оправданно можно долго спорить, но только одно можно сказать точно — гимора разработчикам тут определенно добавилась, особенно тем, кто раньше никогда подписями не занимался. Также для многих стало крайне не очевидно, каким образом разрабатывать драйвер, когда нет на руках валидного сертификата, а тестировать ведь как-то надо. Вот сча я попытаюсь в краткой и доступной форме рассказать о том как это все делается.
Итак, прежде всего, я бы хотел выделить два типа сертификатов, которые я буду рассматривать в рамках данной статьи — тестовый и настоящий. Разница состоит в том, что настоящий сертификат подписан доверенным CA (Certification Authorities — доверенный издатель), типа VeriSign, GlobalSign ну или самим Microsoft, а тестовый подписан самопальным сертификатом типа от Васи Пупкина.
Тестовый сертификат
Как вы уже наверное догадались, именно с помощью этого типа сертификата можно спокойно разрабатывать драйвер, не имея на руках настоящего, но все не так просто, прежде чем его использовать надо проделать некоторые унылые и мудреные мероприятия:
- Сгенерить сам сертификат и установить его. Это можно сделать с помощью тулзы makecert, например так:
Makecert -r -pe -ss PrivateCertStore -n "CN=TestCertforWDK" TestCert.cer
где
PrivateCertStore — название хранилища
TestCertforWDK — название самого сертификата
TestCert.cer — имя файла с сертификатом
(эта тулза входит в комплект WDK 6000/6001 и расположена bin/SelfSign, в WDK 7600 она почему то не входит…) - Добавить этот сертификат в хранилище с доверенным корневыми CA. Открываем в mmc консоль Сертификаты (Run->mmc->File->Add/Remove Snap-in->Certificates) там находим свой сертификат (например в хранилище PrivateCertStore), копируем его в доверенные корневые издатели (Trusted Root Certification Authorities).
- Разрешить тестовые подписи. Для этого прописываем в администраторской консоли:
bcdedit.exe –set TESTSIGNING ON
и перезагружаемся, в итоге на десктопе, после перезагрузки, по углам красоваться соответствующие надписи.
Настоящий сертификат
Тут тоже не все так просто. Дело в том, что не любой CA может выдавать сертификаты для подписи драйверов Windows, а только те, которые авторизованы самой Microsoft, это значит, что корневые сертификаты этих издателей должны быть подписаны Microsoft — что, как раз и выражается в виде этого кросс-сертификата. Вот именно из-за отсутствия кросс-сертификата — тестовая подпись, никогда не будет работать как настоящая. Список доверенных CA, которые обладают такими кросс-сертификатами — представлен тут, там же можно скачать и сами кросс-сертификаты.
После того, как вы выложите несколько сотенок $$$ доверенному центру сертификации, они выдадут вам .pfx файл в котором будут содержаться публичный и приватный ключи. Вы его запустите и с помощью нехитрого диалога (как на рисунке ниже), установите в систему.
Подпись драйвера
Процесс подписи для тестового и настоящего сертификата во многом похожи, различия состоят лиш в том, что:
- для тествой подписи не нужен кросс-сертификат
- для тествой подписи можно не делать таймстамп
Итак приступим
- Качаем тулзу для подписи — signtool (тоже входит в комплект WDK6000/6001)
- Подписываем, с тестовым сертификатом:
signtool sign /v /s PrivateCertStore /n "TestCertforWDK" driver.sys
где
PrivateCertStore — имя хранилища
TestCertforWDK — имя тестового сертификата
driver.sys — имя драйверас настоящим сертификатом:
signtool sign /v /ac MSCV-GlobalSign.cer /s PrivateCertStore /n "YourTrueCertName" /t http://timestamp.globalsign.com/scripts/timstamp.dll driver.sys
где
MSCV-GlobalSign.cer — имя кросс-сертификата
YourTrueCertName — имя настоящего сертификата
timestamp.globalsign.com/scripts/timstamp.dll — адрес таймстампингового центра, в моем случае global sign
Далее драйвер можно установить программно с помощью специальных АПИ либо с помощью замечательной тулзы KmdManager.
Подпись пакета драйверов
В реальной жизни подписи самого драйвера оказывается недостаточно, дело в том, что драйвера устройств как правило поставляются в комплекте с inf-файлом, в котором содержится информация о драйвере и устройствах которые он обслуживает. В этом случае необходимо будет сгенерить cat-файл, который содержит в себе инфу о всех файлах пакета, а потом подписать его точно также, как подписывали драйвер.
Для генерации cat-файла и его подписи нам понадобится:
- Корректный inf-файл (запасайтесь бубнами ребятки)
- Тулза которая генерит этот cat-файл из inf-файлов — inf2cat (эта тулза входит в комплект WDK6001/7600, и написана, как не странно, на .NET)
- После чего генерим cat-файл, например так
inf2cat.exe /driver:release\amd64 /os:Vista_x64,Server2003_x64,Server2008_x64
где
release\amd64 — папка в которой находится inf-файл и драйверы
Vista_x64,Server2003_x64,Server2008_x64 — список ОС, на которых должен работать драйвер - Подписываем его точно также, как и драйвер
signtool sign /v /ac MSCV-GlobalSign.cer /s PrivateCertStore /n "YourTrueCertName" /t http://timestamp.globalsign.com/scripts/timstamp.dll catalog.cat
сам драйвер при этом подписывать не обязательно. - Проверяем, что все хорошо подписалось, для этого открываем свойство .cat файла (или драйвера) и смотрим вкладку Digital Signatures — если есть то можем полюбоваться на результат, если нет, то где-то накосячили.
Также более достоверно можно проверить с помощью командной строки
signtool verify /pa /v /c catalog.cat
EasySign
В результате всех моих исследований на предмет САБЖ-а, я некатал по-быстрому простенькую программку EasySign, которая может подписывать дрова без дополнительного гимора с командной строкой и bat-файлами. Возможно кому-то будет полезно.
Саму прогу можно скачать тут, а мануалку почитать ниже:
- Вбиваем в Inf Dir путь к папке где лежит сам .inf файл и все необходимые файлы к нему прилагающиеся.
- Выбираем ОСи где работает драйвер.
- Cross Cert — указываем путь к кросс-сертификату, если нужно подписать драйвер по-настоящему
- Cert Store — названия хранилища, где лежит наш сертификат (например PrivateCertStore)
- Cert Name — название сертификата (например TestCertforWDK), если сертификат один в хранилище, то можно и не заполнять это поле.
- Time Stamp — адрес таймстампингового центра, для тестового сертификата — можно оставить пустым
- Файлы которые надо подписать, тут нужно обязательно добавить cat файл (если еще не создан, то прописать его имя вручную), а также можно добавить все файлы драйверов
- Generate Catalog Only — если подписывать не надо, а только создать .cat файл
- Жмем Sign — чтобы создать cat-файл и подписать, жмем Log — чтобы почитать что произошло, часто бывают ошибки, например неправильно составлен inf-файл, либо signtool чего-то не нашел и т.п.
Литература по теме
http://msdn.microsoft.com/en-us/library/ff544865(VS.85).aspx
По умолчанию Windows требует, что все драйверы устройств были подписаны валидной цифровой подписью. Если цифровая подпись драйвера отсутствует, или подписывающий сертификат отозван, Windows отклонит установку такого драйвера. Если вам нужно установить в Windows какой-то старый драйвер без цифровой подписи, рекомендуется самостоятельно подписать драйвер с помощью самоподписанного сертификата (сложный, но безопасный вариант). В крайнем случае можно полностью отключить проверку цифровой подписи драйверов в Windows (хотя это и менее безопасный способ). В этой статье мы рассмотрим, как отключить проверку подписи драйверов и установить неподписанный драйвер в Windows 10 и 11.
Содержание:
- Режим загрузки Windows без проверки подписи драйвера
- Отключить режим проверки подписи драйверов из командной строки Windows
- Разрешить установку неподписанных драйверов через групповую политику
В нашем примере при попытке установить драйвер видеокарты без цифровой подписи с помощью команды
pnputil.exe /add-driver c:\drivers\*.inf /subdirs /install
или из проводника Windows, появляются ошибки вида:
Error 0xE000022F: The third-party INF does not contain digital signature information.
Error 0x800B010C: A certificate was explicitly revoked by its issuer.
Режим загрузки Windows без проверки подписи драйвера
Один из отладочных режимов загрузки Windows позволяет загружать операционную систему, игнорируя проверку подписи драйверов. Чтобы загрузить Windows в таком режиме, зажмите кнопку
Shift
и нажмите кнопку
Перезагрузка
в меню Пуск.
Windows запустится в среде восстановлений Windows RE, где нужно выбрать Troubleshoot -> Advanced Options -> Startup Settings -> Restart.
Компьютер перезагрузится еще раз и перд вами появится список режимов загрузки Windows. Нажмите клавишу
F7
(или
Fn+F7
на ноутбуках), чтобы загрузить Windows с включенной опцией Disable driver signature enforcement.
Windows загрузится с отключенной проверки цифровой подписи драйвера. При установке неподписанного драйвера появится предупреждение системы безопасности Windows:
Windows can't verify the publisher of this driver software The driver software you're attempting to install does not have a valid digital signature that verifies who published it, and could potentially be malicious software. You should only install driver software from publishers you trust. How can I decide which device software is safe to install?
Чтобы подтвердить установку драйвера, выберите Install this driver software anyway (
Все равно установить этот драйвер
).
Драйвер будет установлен, но в диспетчере устройств устройство с неподписанным драйвером может отображаться с восклицательным знаком и кодом ошибки 52:
Windows cannot verify the digital signature for the drivers required for this device. 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. (Code 52)
С помощью встроенной утилиты sigverif.exe (File signature verification) можно вывести драйвера, для которых отсутствует цифровая подпись. Запустите утилиту, нажмите кнопку Start. Утилита просканирует хранилище драйверов Windows и выведет файлы драйверов без подписи.
Для работы устройства с неподписанным драйвером вам придется каждый раз загружать Windows с помощью клавиши
F7
, что неудобно.
Обратите внимание, что на компьютерах с UEFI и включенным режимом Secure Boot, отключить проверку подписи драйверов нельзя. Придется отключать Secure Boot в настройках BIOS (UEFI).
Отключить режим проверки подписи драйверов из командной строки Windows
Чтобы при каждой загрузки компьютера не выбирать режим загрузки с отключенной проверкой подписи драйверов, можно изменить настройки загрузчика Windows с помощью утилиты bcdedit.exe.
Откройте командную строку с правами администратора и выполните последовательно следующие команды:
bcdedit.exe -set loadoptions DISABLE_INTEGRITY_CHECKS
bcdedit.exe -set TESTSIGNING ON
bcdedit.exe -set NOINTEGRITYCHECKS ON
Перезагрузите Windows:
Shutdown -f -r -t 0
Теперь Windows будет всегда загружаться в тестовом режиме, в котором не выполняется проверка подписи драйверов. В этом случае в правом нижнем углу рабочего появится небольшая ватермарка с надписью Test Mode и названием версии и билда Windows.
Для отключения тестового режима нужно выполнить:
bcdedit.exe -set loadoptions ENABLE_INTEGRITY_CHECKS
bcdedit.exe -set TESTSIGNING OFF
bcdedit.exe -set NOINTEGRITYCHECKS OFF
Разрешить установку неподписанных драйверов через групповую политику
В редакторе локальной групповой политики Windows (gpedit.msc) есть отдельная опция, позволяющая игнорировать отсутствует подписи при установке драйвера. Этот параметр GPO работает только в Windows 7 и 8, но не применим к Windows 10 или 11.
Откройте консоль редактора локальной GPO и перейдите в раздел User Configuration->Administrative Templates-> System->Driver Installation (Конфигурация пользователя -> Административные шаблоны -> Система -> Установка драйвера).
Откройте настройки параметра Code Signing for Device Drivers (Цифровая подпись драйверов устройств). Включите параметр GPO и в настройках выберите Ignore (Пропустить).
Перезагрузите компьютер и попробуйте установить неподписанный драйвер.