Подписывание пакета драйвера устройства
Для того чтобы подписать пакет драйвера, Вам необходимо иметь цифровой сертификат, предназначенный для подписывания кода. Для получения дополнительной информации о различных типах сертификатов и о процессе их получения обратитесь к разделу «Дополнительные ресурсы» данного руководства. В этом разделе будет описан процесс создания сертификата, который Вы сможете использовать в целях тестирования.
Пошаговая схема подписывания пакета драйвера
Создание цифрового сертификата для подписывания кода
Добавление сертификата в хранилище доверенных корневых центров сертификации
Добавление сертификата в хранилище доверенных издателей
Подписывание пакета драйвера устройства сертификатом
Шаг 1. Создание цифрового сертификата для подписывания кода
На этом шаге Вы создаете сертификат, который может использоваться для подписывания пакета драйвера тестового устройства «Toaster».
Запустите консоль управления MMC и откройте оснастку Certificates для просмотра имеющихся сертификатов.
Важно
Не запускайте оснастку с помощью команды certmgr.msc, поскольку по умолчанию эта команда открывает хранилище сертификатов учетной записи текущего пользователя, а в данной процедуре требуется, чтобы сертификаты размещались в хранилище локального компьютера.
Для открытия оснастки «Certificates» консоли управления MMC выполните следующие действия:
Нажмите кнопку Start, выберите в меню команду Run и в открывшемся окне введите: mmc
В меню File окна Console Root выберите команду Add/Remove Snap-in.
В окне Add or Remove Snap-ins выберите оснастку Certificates и нажмите кнопку Add.
В диалоговом окне Certificates snap-in установите переключатель в положение Computer Accountи нажмите кнопку Next.
В диалоговом окне Select Computer установите переключатель в положение Local computer: (the computer this console is running on) и нажмите кнопку Finish.
Нажмите кнопку OK, чтобы закрыть окно Add or Remove Snap-ins.
Оснастка Certificates должна появиться в дереве консоли. |
Теперь Вы можете создать сертификат.
Примечание
Вы не можете использовать открытое ранее окно командной строки Build Environment, поскольку оно было запущено без повышенных разрешений, необходимых для работы программы MakeCert. Запуск программы MakeCert без повышенных разрешений приведет к возникновению критической ошибки отказа в доступе (код 0x5 – Access Denied).
Для создания цифрового сертификата с помощью программы MakeCert выполните следующие действия:
Запустите окно командной строки Build Environment с повышенными разрешениями. Для этого в меню Start щелкните правой кнопкой мыши на значке Build Environment и в контекстном меню выберите команду Run as administrator.
В командной строке Build Environment наберите следующую команду одной строкой (в данном примере эта команда разделена на несколько строк для удобства чтения):
makecert -r -n "CN=MyCompany - for test use only" -ss MyCompanyCertStore -sr LocalMachine |
-r
Этот параметр указывает, что сертификат не будет подписан центром сертификации, а будет являться «самоподписанным». Такой сертификат также называется корневым. |
-n "CN=MyCompany - for test use only"
Этот параметр задает имя нового сертификата. Рекомендуется использовать имена, позволяющие легко определить сертификат и его назначение.
-ss MyCompanyCertStore
Этот параметр задает имя хранилища, куда будет помещен новый сертификат. |
-sr LocalMachine
Этот параметр указывает, что создаваемое с помощью параметра -ss хранилище является хранилищем локального компьютера, а не хранилищем учетной записи текущего пользователя. |
Когда создание сертификата и хранилища сертификата будет завершено, в командной строке Вы увидите надпись «Succeeded». |
Убедитесь, что Ваш новый сертификат был создан правильно. В открытой ранее оснастке Certificates консоли управления MMC раскройте узел Certificates (Local Computer) – MyCompanyCertStore – Certificates.
В правой панели дважды щелкните на сертификате MyCompany - for test use only.
Откроется диалоговое окно с информацией о сертификате.
Нажмите кнопку OK, чтобы закрыть диалоговое окно Certificate. |
Шаг 2. Добавление сертификата в хранилище доверенных корневых центров сертификации
Выполнение данного шага требуется в случае использования локально созданных сертификатов, таких как сертификаты, созданные с помощью программы MakeCert, по которым нельзя проследить прямую цепочку до сертификата доверенного корневого издателя сертификации.
По умолчанию Ваш новый сертификат имеет статус не имеющего доверия (Untrusted), поскольку Windows не может проверить его достоверность в компьютерном хранилище доверенных корневых центров сертификации. Чтобы в операционных системах Windows Vista и Windows Server «Longhorn» любой сертификат считался действительным, необходимо, чтобы по нему можно было проследить прямую цепочку до сертификата, находящегося в этом хранилище.
Выполнение данного шага не требуется в случае использования коммерческих сертификатов, выданных Вам центром сертификации, поскольку эти сертификаты уже имеют свой корневой сертификат в компьютерном хранилище доверенных корневых центров сертификации.
Примечание
Сертификаты, размещенные в хранилище доверенных корневых центров сертификации текущего пользователя, не подтверждают достоверность цифровых подписей пакетов драйверов.
Для добавления тестового сертификата в хранилище доверенных корневых ЦС выполните следующие действия:
В оснастке Certificates консоли управления MMC щелкните правой кнопкой мыши на сертификате MyCompany - for test use only и в контекстном меню выберите команду Copy.
Щелкните правой кнопкой мыши на хранилище Trusted Root Certification Authorities и в контекстном меню выберите команду Paste.
Раскройте узел Trusted Root Certification Authorities – Certificates и в правой панели дважды щелкните на сертификате MyCompany - for test use only.
Убедитесь, что сообщение «Untrusted» больше не выводится, и нажмите кнопку OK, чтобы закрыть сертификат. |
Шаг 3. Добавление сертификата в компьютерное хранилище доверенных издателей
Для того чтобы Ваш новый сертификат мог выступать в качестве подтверждения достоверности цифровой подписи пакетов драйверов, его также необходимо разместить в компьютерном хранилище доверенных издателей.
Примечание
Сертификаты, размещенные в хранилище доверенных издателей текущего пользователя, не подтверждают достоверность цифровых подписей пакетов драйверов.
Для добавления тестового сертификата в хранилище доверенных издателей выполните следующие действия:
В оснастке Certificates консоли управления MMC щелкните правой кнопкой мыши на сертификате MyCompany - for test use only и в контекстном меню выберите команду Copy.
Щелкните правой кнопкой мыши на хранилище Trusted Publishers и в контекстном меню выберите команду Paste.
Раскройте узел Trusted Publishers – Certificates и убедитесь, что копия Вашего сертификата находится в хранилище.
Нажмите кнопку OK, чтобы закрыть сертификат. |
Шаг 4. Подписывание пакета драйвера устройства сертификатом
Если Вы используете тестовое устройство «Toaster» и его пакет драйвера – выполните следующие действия для замены существующей цифровой подписи своей собственной. Также эти действия следует выполнить, если Вы хотите внедрить в Вашей организации политику, для работы которой все драйверы устройств должны быть подписаны сертификатом Вашей организации.
Если Вы используете пакет драйвера, уже подписанный производителем, то этот пакет уже содержит рабочий файл каталога (CAT-файл), на который ссылается INF-файл. В этом случае Вы можете пропустить первые два шага и начать с шага «Подписывание CAT-файла с помощью программы SignTool».
Шаги, необходимые для подписывания драйвера устройства:
Подготовка INF-файла пакета драйвера
Создание CAT-файла для пакета драйвера
Подписывание CAT-файла с помощью программы SignTool
Подготовка INF-файла пакета драйвера
INF-файл управляет процессом установки пакета драйвера. Цифровая подпись пакета драйвера находится в файле каталога (файл с расширением .CAT). Убедитесь, что используемый для установки пакета драйвера INF-файл содержит ссылку на файл каталога.
В дополнение к этому, для драйвера тестового устройства «Toaster», использующегося в данном руководстве, Вы должны также изменить штамп времени и номер версии.
Совместный установщик (co-installer) – это предоставляемый производителем устройства программный код, который может быть выполнен в процессе установки устройства и который позволяет более гибко управлять программой установки. Совместный установщик драйвера тестового устройства «Toaster» отображает дополнительные программы, которые может установить пользователь. В данных сценариях совместный установщик не используется, поэтому в следующей процедуре Вы удалите его из INF-файла.
Примечание
Если Ваш пакет драйвера уже имеет цифровую подпись производителя и, следовательно, INF-файл уже ссылается на действительный файл каталога, Вы можете пропустить данную процедуру.
Для подготовки INF-файла пакета драйвера выполните следующие действия:
В окне командной строки Build Environment, запущенной с повышенными разрешениями, перейдите в папку, содержащую пакет драйвера. Для этого наберите следующую команду: cd \toaster\device
Наберите следующую команду: Notepad toastpkg.inf
В программе Notepad откроется содержимое INF-файла.
Найдите раздел [Version]. Исходный файл содержит следующие строки: CatalogFile.NTx86 = tostx86.cat CatalogFile.NTIA64 = tostia64.cat CatalogFile.NTAMD64 = tstamd64.cat
Удалите эти три строки и замените их следующий строкой: CatalogFile = toaster.cat
В разделе [Version] найдите строку, начинающуюся с DriverVer=. Замените дату и номер версии таким образом, чтобы получилась следующая строка: DriverVer=04/01/2006,9.9.9.9
В разделе [Toaster_Device.NT.CoInstallers] найдите и удалите следующие три строки: [Toaster_Device.NT.CoInstallers] AddReg=CoInstaller_AddReg CopyFiles=CoInstaller_CopyFiles
Сохраните изменения и закройте программу Блокнот. |
Создание CAT-файла для пакета драйвера
Следующим Вашим действием является создание CAT-файла для пакета драйвера тестового устройства «Toaster» с помощью программы Signability. Эта программа анализирует INF-файл пакета драйвера и генерирует уникальные хеши для всех файлов, на которые ссылается INF-файл. Получатель пакета драйвера использует хеши для проверки того, что полученные файлы не были изменены с момента подписывания.
Если Ваш пакет драйвера уже имеет цифровую подпись производителя, то CAT-файл уже существует, и Вам не нужно создавать новый файл. Вы можете пропустить данную процедуру и перейти к следующему шагу «Подписывание CAT-файла с помощью программы SignTool», чтобы заменить цифровую подпись разработчика драйвера своей собственной.
Примечание
Программа Signability должна выполняться из командной строки, запущенной с повышенными разрешениями.
Для создания CAT-файла для пакета драйвера выполните следующие действия:
В окне командной строки Build Environment, запущенном с повышенными разрешениями, наберите следующую команду: signability /driver:c:\toaster\device /os:256 /auto /cat
/driver:c:\toaster\device
Этот параметр указывает местоположение INF-файла для пакета драйвера. Вы должны указать полный путь. Символ «.» в данном случае не может использоваться для указания текущей папки в относительном пути.
/os:256
Этот параметр указывает, что операционной системой является 32-разрядная версия ОС Windows Vista. Для получения полного списка поддерживаемых операционных систем и их кодов выполните команду signability /?.
/auto
Этот параметр указывает, что процедура должна быть выполнена автоматически, без вмешательства пользователя.
/cat
Этот параметр указывает, что создается файл каталога, указанный в INF-файле.
Просмотрите информацию, выводимую программой Signability. Обратите внимание на то, что для каждого файла выводится предупреждение о том, что CAT-файл не будет являться доверенным до тех пор, пока он не будет подписан Вами. Signability v2.19 (engine v01.01.0005) ================================================ Test Results for c:\toaster\device Testing versus the following operating systems: Windows Vista (32-bit) Final result: Test passed with warnings. (Details below.) Warnings: WARN: \toastpkg.inf is not represented by a signed catalog file. WARN: \i386\toaster.sys is not represented by a signed catalog file. WARN: \i386\tostrcls.dll is not represented by a signed catalog file. Catalog files successfully generated.
Закройте программу Блокнот, когда закончите просмотр отчета.
Просмотрите созданный CAT-файл, который находится в папке «c:\toaster\driver». Для этого в командной строке наберите следующую команду: start toaster.cat
Откроется диалоговое окно Security Catalog, показывающее, что каталог не подписан. Поскольку CAT-файл не подписан, кнопка просмотра цифровой подписи View Signature недоступна.
Перейдите на вкладку Security Catalog. В разделе Catalog entries содержатся три записи: для INF-файла, для SYS-файла и для DLL-файла, входящих в состав пакета драйвера. Щелкните мышью на каждой записи и обратите внимание на то, что в разделе Entry Details для каждого файла указан отпечаток (хеш), который может использоваться для проверки целостности файла.
Нажмите кнопку OK, чтобы закрыть диалоговое окно Security Catalog. |
Подписывание CAT-файла с помощью программы SignTool
Теперь, когда у Вас имеется файл каталога, Вы можете подписать его с помощью программы SignTool. Независимо от того, используете ли Вы тестовое устройство «Toaster» или любое другое устройство, выполните следующие шаги.
Важно
При подписывании пакета драйвера Вам следует всегда устанавливать штамп времени, определяющий дату создания цифровой подписи. Если сертификат будет отозван по соображениям безопасности, или если закончится срок его действия, действительными будут только те подписи, которые были созданы ранее даты отзыва или окончания срока действия сертификата. Если штамп времени не включен в цифровую подпись, Windows не сможет определить, когда был подписан пакет – до или после даты отзыва или окончания срока действия сертификата, и цифровая подпись не будет принята.
Для подписывания CAT-файла с помощью программы SignTool выполните следующие действия:
В окне командной строки Build Environment, запущенном с повышенными разрешениями, наберите следующую команду одной строкой (в данном примере эта команда разделена на несколько строк для удобства чтения):
SignTool sign /s MyCompanyCertStore /n MyCompany /t http://timestamp.verisign.com/scripts/timestamp.dll toaster.cat |
/s MyCompanyCertStore
Этот параметр задает имя хранилища сертификатов, в котором программа SignTool осуществляет поиск сертификата, указанного в параметре /n.
/n MyCompany
Этот параметр задает имя сертификата, который используется для подписывания пакета драйвера. Вы должны указать достаточно длинный фрагмент имени сертификата, чтобы программа SignTool смогла отличить его от других сертификатов, расположенных в хранилище. Если имя сертификата содержит пробелы, Вы должны заключить его в двойные кавычки.
/t path to time stamping service
Этот параметр задает путь к службе штампа времени доверенного центра сертификации. Если Ваш сертификат был заказан у коммерческого поставщика, Вам должны были сообщить соответствующий путь к службе.
toaster.cat
Этот параметр задает имя подписываемого CAT-файла и путь к нему.
По завершении работы программы Signtool Вы должны увидеть следующее сообщение:
Successfully signed and timestamped: toaster.cat | | |
Для просмотра и проверки подписанного CAT-файла наберите в командной строке следующую команду: start toaster.cat
Убедитесь, что в верхней части страницы общих свойств диалогового окна Security Catalog отображается информация о том, что каталог имеет статус доверенного (Trusted), а кнопка View Signature доступна.
Нажмите кнопку View Signature и убедитесь в правильности данных цифровой подписи, которую Вы добавили к пакету драйвера. Никакие другие элементы CAT-файла не были изменены. |
Наверх страницы
Размещение пакета драйвера устройства в хранилище драйверов
Размещение пакета драйвера устройств в хранилище драйверов на клиентском компьютере позволяет обеспечить наиболее эффективную работу пользователя. После того, как подписанный пакет драйвера помещен в хранилище, Windows считает его надежным. До тех пор, пока для определенного устройства не заданы политики, ограничивающие его установку, пользователь может просто подключить это устройство, а операционная система автоматически установит соответствующий драйвер незаметно для пользователя.
В состав ОС Windows включена утилита PnPUtil, с помощью которой Вы можете работать с хранилищем драйверов, выполняя такие действия, как добавление, удаление и просмотр пакетов драйверов, находящихся в хранилище.
Важно
Вы можете работать с программой PnPUtil только в командной строке, запущенной с повышенными разрешениями. Программа PnPUtil не может вызывать диалоговое окно User Account Control. Если Вы попытаетесь использовать эту программу для добавления или удаления пакетов из командной строки, не запущенной от имени администратора, выполнение команд окончится неудачей.
Пошаговая схема размещения пакета драйвера устройства в хранилище драйверов
Попытка разместить неподписанный пакет драйвера
Попытка разместить подписанный, но впоследствии измененный пакет драйвера
Попытка разместить пакет драйвера, подписанный надлежащим образом
Проверочная установка подписанного пакета драйвера
Шаг 1. Попытка разместить неподписанный пакет драйвера
Windows прерывает попытку установки неправильно подписанного пакета драйвера.
Чтобы попытаться разместить неподписанный пакет драйвера, выполните следующие действия:
В окне командной строки Build Environment, запущенном с повышенными разрешениями, временно переименуйте CAT-файл, чтобы гарантированно удалить цифровую подпись из пакета драйвера. Для этого наберите следующую команду: ren toaster.cat toaster.nosig
Попытайтесь поместить неподписанный пакет в хранилище драйверов. Для этого в окне командной строки, запущенном с повышенными разрешениями, наберите следующую команду: pnputil.exe -a toastpkg.inf
Поскольку INF-файл не подписан, Вы увидите диалоговое окно Windows Security. ОС Windows не может сопоставить этот файл с каким-либо сертификатом, являющимся доверенным для компьютера.
Щелкните Don’t Install.
Программа PnPUtil сообщит, что размещение пакета драйвера в хранилище окончилось неудачей: Adding the driver package failed : A file could not be verified because it does not have an associated catalog signed via Authenticode(tm). Adding at least one driver package failed!
Верните файлу каталога его первоначальное имя. Для этого в командной строке наберите следующую команду: Ren toaster.nosig toaster.cat |
Шаг 2. Попытка разместить подписанный, но впоследствии измененный пакет драйвера
Windows также прерывает попытку установки пакета драйвера, который был изменен с момента подписания. Поскольку цифровая подпись включает в себя отпечатки для всех файлов пакета драйвера, изменение любого из них приводит к тому, что проверка достоверности цифровой подписи оканчивается неудачей.
Чтобы попытаться разместить подписанный, но впоследствии измененный пакет драйвера, выполните следующие действия:
Сохраните исходную копию файла toastpkg.inf. Для этого в командной строке наберите следующую команду:
Copy toastpkg.inf toastpkg.orig |
Измените файл toastpkg.inf. Это приведет к тому, что отпечаток этого файла станет недействительным. Для изменения файла откройте его в программе Notepad:
Установите курсор в самом начале файла, нажмите клавишу Enter, чтобы добавить пустую строку, сохраните изменения и закройте программу Блокнот.
Попытайтесь поместить измененный пакет в хранилище драйверов. Для этого в командной строке наберите следующую команду:
pnputil.exe -a toastpkg.inf |
Так как пакет был изменен с момента подписания, Вы увидите диалоговое окно Windows Security, предупреждающее о том, что цифровая подпись недействительна.
Щелкните Don’t Install.
Замените измененный файл modified .inf его исходной копией. Для этого в командной строке наберите следующую команду:
Copy /y toastkg.orig toastpkg.inf | | |
Шаг 3. Попытка разместить пакет драйвера, подписанный надлежащим образом
Чтобы попытаться разместить пакет драйвера, подписанный надлежащим образом, выполните следующие действия
Попытайтесь поместить пакет драйвера в хранилище драйверов. Для этого в командной строке наберите следующую команду:
pnputil.exe -a toastpkg.inf |
Так как прикрепленная к пакету цифровая подпись является действительной, файлы пакета не были изменены, и отпечатки файлов пакета совпадают с отпечатками, содержащимися в цифровой подписи, Windows успешно поместит пакет драйвера в хранилище, не запрашивая у пользователя никаких действий. По завершении своей работы программа выводит имя, под которым был опубликован пакет драйвера, включающее в себя номер OEM, который Вы можете использовать для того, чтобы впоследствии при необходимости удалить пакет драйвера из хранилища. Запишите номер, присвоенный Вашему пакету драйверов.
Processing inf : toastpkg.inf Driver Package added successfully. Published name : oem4.inf |
Примечание
Номер, присвоенный Вашему пакету драйвера, может отличаться от приведенного выше в зависимости от количества пакетов, уже установленных на компьютере. |
Вы можете просмотреть список пакетов, находящихся в хранилище драйверов, запустим программу PnPUtil с параметром -e.
Чтобы убедиться, что пакет находится в хранилище драйверов, выполните следующие действия:
В командной строке наберите следующую команду:
Найдите в списке Ваш пакет драйверов с номером OEM, присвоенном при добавлении пакета в хранилище драйверов. Запишите этот номер, поскольку он может понадобиться Вам позже. Вы также можете видеть номер версии и дату, которые Вы указывали в INF-файле.
Published name : oem4.inf Driver package provider : Toast?R?Us Class : Unknown driver class Driver verstion and date : 04/01/2006 9.9.9.9 Signer name : MyCompany - for test use only | |
Шаг 4. Проверочная установка подписанного пакета драйвера
На этом этапе пакет драйвера находится в хранилище драйверов. Пакет был помещен администратором в хранилище драйверов, операционная система выполнила проверку достоверности цифровой подписи, и, таким образом, драйвер устройства может быть установлен обычным пользователем. От пользователя требуется просто подключить устройство.
Примечание
Несмотря на то, что Windows может устанавливать драйверы, расположенные в хранилище драйверов, от имени обычного пользователя, в следующей процедуре Вы запускаете программу Enum.exe от имени администратора. Наличие повышенных разрешений необходимо не для процесса установки драйвера, а для того, чтобы можно было программно эмулировать установку аппаратного устройства. Если в следующей процедуре Вы используете реальное устройство и соответствующий драйвер, предоставленный производителем, то при подключении этого устройства Вам не требуется иметь в системе привилегии администратора.
Для выполнения проверочной установки пакета драйвера, размещенного в хранилище драйверов, выполните следующие действия:
Завершите сеанс работы и войдите в систему под учетной записью DMI-Client1\TestUser.
Запустите командную строку с правами администратора. Для этого в меню Start выберите пункт All Programs – Accessories, щелкните правой кнопкой мыши на значке Command Prompt и в контекстном меню выберите команду Run as administrator.
В диалоговом окне User Account Control Вам будет предложено указать имя и пароль учетной записи администратора. Выберите учетную запись DMI-Client1\TestAdmin и введите пароль для нее.
Откроется окно командной строки.
Запустите диспетчер устройств (Device Manager) для просмотра установленных в системе устройств. Для этого в командной строке, запущенной с повышенными разрешениями, наберите следующую команду:
Расположите окна на рабочем столе таким образом, чтобы Вы одновременно могли работать с командной строкой и видеть окно диспетчера устройств.
Перейдите в папку «c:\toaster». Для этого в командной строке наберите следующую команду:
Запустите программу Enum.exe, эмулирующую подключение устройства «Toaster». Для этого в командной строке наберите следующую команду:
По окончании установки драйвера устройства это устройство появится в окне диспетчера устройств.
|
Примечание
Не удаляйте устройство из системы, пока Вам не будет предложено сделать это в следующей процедуре.
Наверх страницы