2. Как самостоятельно подписать драйвер для Windows 7 (Эмуляторы ключей)

Источник: http://winitpro.ru/index.php/2014/05/08/kak-samostoyatelno-podpisat-drajver-dlya-windows-7/

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

В Windows 7 x64 существует несколько способов отключить проверку цифровой подписи устанавливаемого драйвера: с помощью групповой политики или тестового режима загрузки системы (подробнее все способы описаны в статье Отключаем проверку цифровой подписи для установки неподписанных драйверов в Windows 7).

Сегодня мы покажем, как можно самостоятельно подписать любой неподписанный драйвер для 64 битной версии Windows 7.

Важно. Эта статья касается только Windows 7, подписать таким образом драйвер для Windows 8 и Windows 8.1 не получится. Как установить неподписанный драйвер в Windows 8/8.1 описано здесь.

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

Pnputil –a c:\tools\drv1\xg20gr.inf

Примечание. Эта и все последующие команды выполняются в командной строке, запущенной с правами администратора.

В процессе его установки система отобразит предупреждение о том, что система не может проверить цифровую подпись данного драйвера.

Попробуем подписать данный драйвер с помощью самоподписанного сертификата.

Какие инструменты нам понадобятся

Для работы нам понадобится скачать и установить (с настройками по умолчанию) следующие инструменты разработчика приложений для Windows.

Совет. Перед установкой этих инструментов, убедитесь что в системе установлен .NET Framework 4.

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

Создадим в корне диска каталог C:\WinItProDriverCert.

Откроем командную строку и перейдем в следующий каталог:

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

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

makecert -r -sv C:\WinItProDriverCert\WinitproDrivers.pvk -n CN="Winitpro" C:\WinItProDriverCert\WinItProDrivers.cer

Во время создания утилита попросит указать пароль для ключа, пусть это будет P@ss0wrd.

На основе созданного сертификата создадим публичный ключ для сертификат издателя ПО (PKCS).

cert2spc C:\WinItProDriverCert\WinItProDrivers.cer C:\WinItProDriverCert\WinItProDrivers.spc

Объединим публичный ключ (.spc) и персональный ключ (.pvk) в одном файле сертификата формата Personal Information Exchange (.pfx)

pvk2pfx -pvk C:\WinItProDriverCert\WinitproDrivers.pvk -pi P@ss0wrd -spc C:\WinItProDriverCert\WinItProDrivers.spc -pfx C:\WinItProDriverCert\WinItProDrivers.pfx -po P@ss0wrd

Подготовка пакета драйверов

Создадим каталог C:\WinItProDriverCert\xg20 и скопируем в него все файлы из каталога, в который первоначально был распакован архив с драйвером (c:\tools\drv1\). Убедить что среди файлов имеются файлы с расширением .sys и .inf (в нашем случае xg20grp.sys и xg20gr).

Перейдем в каталог:

cd C:\WinDDK\7600.16385.1\bin\selfsign

На основе inf файла сгенерируем для нашей платформы cat файл (содержит информацию о всех файлах пакета драйвера).

inf2cat.exe /driver:"C:\WinItProDriverCert\xg20" /os:7_X64 /verbose

Чтобы убедитесь, что процедура прошла корректно, проверьте что в логе присутствуют сообщения:

neration complete.

После выполнения команды в каталоге драйвера должен обновиться файл xg20gr.cat

Подписываем драйвер самоподписанным сертифкатом

Перейдите в каталог

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

Подпишем комплект файлов драйвера созданным нами сертификатом, в качестве сервиса таймстампа воспользуемся ресурсом Verisign.

signtool sign /f C:\WinItProDriverCert\WinItProDrivers.pfx /p P@ss0wrd /t http://timestamp.verisign.com/scripts/timstamp.dll /v C:\WinItProDriverCert\xg20\xg20gr.cat

Примечание. Цифровая подпись драйвера содержится в .cat файле, на который ссылается .inf файл драйвера.

Установка сертификата

Т.к. созданный нами сертификат является самоподписанным, система по-умолчанию ему не доверяет. Добавим наш сертификат в локальное хранилище сертификатов. Сделать это можно с помощью команд:

certmgr.exe -add C:\WinItProDriverCert\WinItProDrivers.cer -s -r localMachine ROOT

certmgr.exe -add C:\WinItProDriverCert\WinItProDrivers.cer -s -r localMachine TRUSTEDPUBLISHER

Или из графического мастера добавления сертификатов (сертификат нужно поместить в хранилища Trusted Publishers и Trusted Root Certification Authorities)

Примечание. Проверить наличие созданного нами сертификата в доверенных можно, открыв оснастку управления сертификатами (certmgr.msc) и проверив наличие созданного нами сертификата (выдан для winitpro) в соответствующих хранилищах.

Установка драйвера, заверенного самоподписанным сертификатом

Попробуем еще раз установить подписанный нами драйвер, выполнив команду:

Pnputil –i –a C:\WinItProDriverCert\xg20\xg20gr.inf

Теперь в процессе установки драйвера, окна-предупреждения об отсутствующей цифровой подписи драйвера не появится, система же просто выдаст сообщение о том, уверены ли вы, что хотите установить этот драйвер. Нажав «Install» — вы установите драйвер в системе.