Как самостоятельно подписать драйвер для Windows 7 | Windows для системных администраторов

Как самостоятельно подписать драйвер для 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 7 ошибка при установе драйвера без цифровой подписи

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

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


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

Генерируем cat файл драйвера на основе inf файла

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

Signability test complete.
и
Catalog generation 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» — вы установите драйвер в системе.

Установка самоподписаного драйвера в windows 7

Еще записи по теме: Windows 7
Понравилась статья? Скажи спасибо и расскажи друзьям!
Назад:
Вперед:

Комментариев: 37

Оставить комментарий
  1. Роман | 15.10.2014

    Инструкция отличнейшая!!! наконец то можно будет нормально обходится без виртуальной машины 32 битной , спасибо!!!!!!!!!!!!!

    Ответить
  2. Сергей | 14.11.2014

    Не работает! Подписываю драйвер, в его свойствах значится, что он подписан — но при установке Винда говорит: ошибка 52, не могу проверить цифровую подпись. Если б подписывание можно было так легко обойти — кто б тогда заносил бы M$ денежки за подписи?

    Ответить
    • Георгий | 24.12.2014

      Попробовал. Получилось отлично. У драйвера показывает цифровую подпись. Установилось через devcon без всяких всплывающих окошек.

      Ответить
      • Георгий | 24.12.2014

        Через pnputil тоже нормально.

        Ответить
  3. андрей | 04.02.2015

    Спасибо за мануал. Успешно подписал TAP драйвер к OpenVPN. Ставится без проблем

    Ответить
    • bmcsoft | 20.06.2015

      Это боты-накрутчики успешно установили? Только что сделал всё по инструкции с точностью до символа: ошибка 52. Либо у людей винда 32-битная, либо TESTSIGNING включен. Либо боты-накрутчики.

      Ответить
  4. Сергей | 14.02.2015

    Как связаться с автором статьи? Очень нужно. Не получается, а очень нужно… [URL=http://fastpic.ru/view/59/2015/0214/5ceb244614504aae1dd1d1fe8e607b6f.png.html][IMG]http://i59.fastpic.ru/thumb/2015/0214/6f/5ceb244614504aae1dd1d1fe8e607b6f.jpeg[/IMG][/URL]

    Ответить
  5. Maltisa Malkavian | 15.02.2015

    кто встретился с проблемой установки SDK, удалите MS Visual C ++ 2010 года, как и 32 так и 64 битную версии

    Ответить
    • Игорь | 19.02.2015

      Точнее, проблема в VC++ 2010 Redistributable!
      Их можно смело удалить — SDK поставит свои.

      Ответить
  6. Руслан | 17.02.2015

    Спасибо большое! Наконец-то установил драйвер к своему «любимому» PROTOSS AVR910.
    Просто сказочное пособие!!!

    Ответить
  7. Jugin | 11.04.2015

    Здравствуйте.
    Сделал всё по инструкции, в свойствах драйвера числится, что он подписан. Сертификаты установил в указанное инструкцией место.
    Но при попытке установить драйвер, система отображает предупреждение о том, что не может проверить цифровую подпись данного драйвера. В итоге ошибка 52.

    Ответить
    • Jugin | 12.04.2015

      Переустановил сертификаты с помощью «certmgr.exe», вчера делал это через «графический мастер добавления сертификатов». Красное окошко появляться перестало, но в диспетчере устройств всё равно ОШИБКА 52.
      Пожалуйста, помогите решить проблему.

      Ответить
  8. Patrondragon | 01.06.2015

    Ребята никто не поможет подписать драйвер для телефона FLY IQ436? Самому повторить вышеописанную процедуру слишком сложно! Помогите пожайлуста в СКАЙПЕ Я PatronDragon!!!

    Ответить
    • PatronDragon | 05.06.2015

      Дохожу до пункта На основе inf файла сгенерируем для нашей платформы cat файл (содержит информацию о всех файлах пакета драйвера). и не знаю какой файл у себя выбрать!? Какой не беру всё равно пишет does not exist! ЧТО ДЕЛАТЬ?

      Ответить
      • PatronDragon | 05.06.2015

        У меня в папке с моим драйвером нет файла inf! Что делать?

        Ответить
        • itpro | 05.06.2015

          Без inf файла у вас ничего не получится, т.к. в именно в нем описывается порядок установки и структура исполняемых файлов драйвера. Посмотрите, возможно он у вас в каком-нибудь архиве лежит (rar, zip, cab)

          Ответить
  9. Ge00 | 23.12.2015

    А сам автор статьи пробовал данный алгоритм?
    Уж слишком он непростой, а впустую не хотелось бы всё это проделать…

    Ответить
  10. Сергей | 24.12.2015

    Послушайте, люди, не имея цифровой подписи — невозможно подписать драйвер, чтобы он нормально устанавливался! Винда признает лишь драйвер, подписанный с помощью цифровой подписи, и то не всякой — а лишь выданной центром сертификации, кросс-сертификат которого входит в дистрибутив Виндов. И всё. Механизм там заложен такой. Никакие другие танцы с бубнами не канают, пустая трата времени. Помучавшись и убедившись в этом — пошёл и купил цифровую подпись для подписывания драйвером у GoDaddy, у них дешевле всего, 8 тыр за год. И могу целый год подписывать свои драйверы, хоть для Win7 64-битной, хоть для Win10 (потому что будет и SHA1, и SHA2).
    Подписал, теперь устанавливаются в любую Винду.

    Ответить
    • Ge00 | 24.12.2015

      Хм, зачем тогда авторы пишут такие статьи?

      Если купить цифровую подпись на год, то что станет с подписанными ей драйверами через год?
      Они перестанут действовать или нет?
      Или год — это только срок действия подписи, а всё ей подписанное действует бессрочно?

      Ответить
      • Сергей | 24.12.2015

        Подписанное — бессрочно. Год — срок действия ЦП, подписывать можно в течении года.
        Зачем пишут такие статьи… сложно сказать. Возможно, на именно семёрке, в дебаг-режиме, чисто для себя — оно и прокатит (хоть у меня и не заработало). Но для себя можно и по F8 грузиться, отключая проверку ЦП! А чтобы устанавливалось нормально на всех весиях ОС, включая 10ку — лучше подписать. Уж коммерческий продукт — точно!

        Ответить
        • Ge00 | 24.12.2015

          С помощью такой подписи от GoDaddy получится сделать .cat из .inf и .sys ?

          Ответить
          • Сергей | 14.09.2016

            Да, получится.

            Ответить
    • Андрей М. | 27.04.2016

      Привет !
      ты правильно пишешь — этим способом как в статье тут написано можно только в тестовом режиме на 64 бит винде работать.
      А чтобы без тестового режиме работать — необходимо купить драйвера.

      Ты не мог бы мне помочь подписать драйвер ?
      у тебя ещё год не прошёл вроде
      очень нужно

      Ответить
  11. Ge00 | 24.12.2015

    С помощью такой подписи от GoDaddy получится сделать .cat из .inf и .sys ?

    Ответить
    • Сергей | 24.12.2015

      Как раз алгоритм подписывания в статье расписан верно, этим она ценна.
      Сначала, с помощью утилиты inf2cat порождается cat-файл. Он пока без подписей, но содержит хэши всех файлов, входящих в состав драйвера.
      А потом этот cat-файл подписывается утилитой signtool! Но при этом мы предъявляем не самопальный pfx, а полученный от GoDaddy pfx! Точнее, они дают другие файлы, из которых формируется pfx. Тут пришлось помудохаться, их техподдержка некомпетентна и бесполезна (зато цены низкие — как-то это, наверное, связано? ;-) Но в конце-концов разобрался.

      Ответить
      • Ge00 | 25.12.2015

        В результате подписывания исходные .inf и .sys как-то модифицируются или никак не затрагиваются?
        Их исходники не нужны для подписывания драйвера?

        Ответить
        • Сергей | 28.12.2015

          Никакие файлы, кроме .cat — никак не модифицируются. Исходников не требуется.

          Ответить
      • Ge00 | 26.12.2015

        Если я куплю такого типа сертификат, то получится ли с его помощью заменить подпись в некоем драйвере на свою?
        Например, есть подписанный драйвер ( состоит из .inf, .sys , .cat файлов ).
        Получится ли убрать от него .cat и создать новый .cat ( командами inf2cat.exe и signtool.exe ), подписанный таким сертификатом?
        Такой драйвер будет нормально работать?
        Другими словами , работает ли такое, что можно убрать одну цифровую подпись и вместо неё поставить другую?

        Ответить
        • Сергей | 28.12.2015

          Да, это возможно. Среди прочего, я так и делал, для драйвера PCI-контроллера PLX9054 — взял подписанный драйвер из SDK, и сделал к нему свои inf и cat.

          Ответить
  12. Ge00 | 27.12.2015

    Сергей, Вы получили сертификат с алгоритмом хеширования подписи SHA1, SHA2 или с SHA256?
    Надо ли на винду ставить какие-то апдейты или пэтчи, чтобы подписанные драйверы не выдавали ошибку 52?

    Ответить
    • Сергей | 28.12.2015

      SHA1 и SHA2. Подписал с использованием SHA2, чтобы и Win10 охватить. По идее, Win7 должна понимать SHA2 только после патча, в реальности же на Win7 x64 драйвер встаёт (что без подписи невозможно), но Винда говорит, что подписи нет :-)

      Ответить
      • Растаман | 14.09.2016

        Сергей, я могу обратить к Вам за помощью. Вы бы не смогли подписать всего один драйвер. Я бы Вам мог их скинуть на почту. Если сможете помочь прошу отзовитесь. Был бы Вам очень признателен!

        Ответить
        • Сергей | 14.09.2016

          Если бы это был мой личный сертификат — мог бы. Но он принадлежит компании, так что увы… Советую вам получить свой сертификат — это не так долго и сложно, как кажется!

          Ответить
  13. edv | 24.09.2016

    А на 32 битной Windows 7 можно как-то подписать драйвер?

    Ответить
    • edv | 01.10.2016

      Сам отвечу, можно, на процессе создание cat файла нужно записать не x64, a x86. Спасибо, инструкция рабочая

      Ответить
  14. Сегрей | 19.10.2016

    А, уже подписанный кем — то файл .sys можно переподписать? Именно, сам sys?
    Качаю дрова некой китайской фирмы, имею свою цифровую подпись, но, сам sys, если посмотреть в свойствах файла, имеет какую — то другую подпись(без таймштампа, кстати). cat и inf делаю сам и подписываю своей подписью. При установке вылезает «красное окно», что не удается проверить издателя(как на картинке выше), потом, вылезает второе окно, что, драйвер не установлен, поскольку, не имеет цифровой подписи,то есть, сам sys не катит, насколько я понял. Девайс в диспетчере устройств с восклицательным знаком,и, соответственно, не работает.Обращение к разработчику не рассматриваю — фирма в Китае приказала долго жить.Можно ли с sys снять подпись и его переподписать?

    Ответить
    • Сегрей | 19.10.2016

      ЗЫ: Моя подпись действительна, проверял…
      exe и dll подписываются норм., так же, подписываются драйверы, которые писали сами, без проблем… а, чужие дрова — никак…

      Ответить
Полные правила комментирования на сайте winitpro.ru. Вопросы, не связанные с содержимым статьи или ее обсуждением удаляются.

Сказать Спасибо! можно на этой странице или (еще лучше) поделиться с друзями ссылкой на понравившуюся статью в любимой социальной сети(специально для этого на сайте присуствуют кнопки популярных соц. сетей).

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)



MAXCACHE: 0.3MB/0.00115 sec