Поделиться через


Проверка подписи

Начиная с Windows Vista, версии windows на основе x64 требуются все программное обеспечение, работающее в режиме ядра, включая драйверы, для цифровой подписи для загрузки. Изначально можно использовать переключатель F8 (на каждой загрузке до загрузки Windows), чтобы временно отключить принудительное применение времени загрузки, требующее допустимой подписи в драйвере. Но это станет емким после первых немногих использования. Вы можете подключить отладчик ядра к тестовом компьютеру, который отключит те же проверки принудительной нагрузки после использования правильных команд BCDEdit. Однако в конечном итоге вам потребуется протестировать драйвер во время разработки и в конечном итоге подписать драйвер перед публикацией его пользователям.

Установка неподписаного драйвера во время разработки и тестирования

Извлечение из статьи об установке драйвера без знака во время разработки и тестирования:

По умолчанию 64-разрядные версии Windows Vista и более поздних версий Windows загружают драйвер режима ядра, только если ядро может проверить подпись драйвера. Однако это поведение по умолчанию может быть отключено во время разработки ранних драйверов и для неавтомированного тестирования. Разработчики могут использовать один из следующих механизмов, чтобы временно отключить принудительное применение допустимой подписи драйвера во время загрузки. Однако для полного автоматизации тестирования драйвера, установленного самонастраивающийся (PnP), файл каталога драйвера должен быть подписан. Подписывание драйвера требуется, так как Windows Vista и более поздних версиях Windows отображают диалоговое окно подписывания драйвера для неподписанных драйверов, которым требуется системный администратор авторизовать установку драйвера, потенциально предотвращая установку драйвера без необходимых привилегий для установки драйвера и использования устройства. Это поведение установки драйвера PnP нельзя отключить в Windows Vista и более поздних версиях Windows.

Использование параметра расширенной загрузки F8

Windows Vista и более поздних версиях Windows поддерживают параметр расширенной загрузки F8 — "Отключить принудительное применение подписи драйверов", который отключает принудительное применение подписи во время загрузки для драйвера режима ядра только для текущего системного сеанса. Этот параметр не сохраняется во время перезапуска системы.

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

Снимок экрана с параметрами расширенной загрузки f8.

Подключение отладчика ядра для отключения проверки подписи

Присоединение активного отладчика ядра к компьютеру разработки или тестирования отключает принудительное применение подписи во время загрузки для драйверов в режиме ядра. Чтобы использовать эту конфигурацию отладки, подключите компьютер отладки к компьютеру разработки или тестирования и включите отладку ядра на компьютере разработки или тестирования, выполнив следующую команду:

bcdedit -debug on

Чтобы использовать BCDEdit, пользователь должен быть членом группы администраторов в системе и выполнить команду из командной строки с повышенными привилегиями. Чтобы открыть окно командной строки с повышенными привилегиями, создайте ярлык рабочего стола для Cmd.exe, выберите и удерживайте ярлык (или щелкните правой кнопкой мыши) и выберите " Запуск от имени администратора".

Однако следует учитывать, что также существуют ситуации, в которых разработчику может потребоваться подключить отладчик ядра, но также необходимо поддерживать принудительное применение подписи во время загрузки. См . приложение 1. Применение проверки подписи в режиме сигнатуры в режиме отладки ядра для этого.

Проверка подписи пакета драйвера

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

Отрывок из инструкции по проверке пакета драйвера:

Компьютер подписывания

Это компьютер, используемый для тестирования пакета драйвера для Windows Vista и более поздних версий Windows. Этот компьютер должен работать под управлением Windows XP с пакетом обновления 2 (SP2) или более поздних версий Windows. Чтобы использовать средства подписывания драйверов, этот компьютер должен установить Windows Vista и более поздние версии комплекта драйверов Windows (WDK). Это также может быть компьютер разработки.

Тестовый компьютер

Это компьютер, который используется для установки и тестирования пакета драйвера, подписанного тестом. Этот компьютер должен работать под управлением Windows Vista или более поздних версий Windows.

Проверка процедуры подписывания

Пакеты драйверов будут содержать двоичный файл драйвера, INF-файл, ФАЙЛ CAT и любые другие необходимые файлы. Пакет драйвера может содержать вложенные каталоги, такие как x86, AMD64, IA64, если драйвер создан для нескольких целевых типов процессора. Выполните эти действия с помощью компьютера разработки и подписывания.

В следующей процедуре описаны действия по проверке подписи пакета драйвера:

  1. Создайте драйвер для целевого объекта. Если вы создаете драйвер для Windows 8.0 или Windows 8.1, используйте Visual Studio 2012 или Visual Studio 2013 с соответствующим установленным WDK, например Windows 8.0 или 8.1 WDK соответственно.

    Все средства команд, описанные ниже, должны использоваться в соответствующем окне инструментов или командного окна сборки Visual Studio 2012 или Visual Studio 2013.

    Примечание.

    Средства команд для Visual Studio находятся в каталоге установки C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\Shortcuts

    Все пять сочетаний клавиш для командной строки будут иметь, makecert.exe, inf2cat.exe, signtool.exe, certmgr.exe и т. д., команды.

    Вы можете выбрать наиболее общую команду "Командная строка разработчика для VS2013". Сочетания клавиш можно закрепить на панели задач для простого доступа.

    Примечание.

    Обратите внимание, что с помощью Visual Studio вместо подхода к подписи драйвера можно также использовать среду разработки Visual Studio 2013 (также называемую интегрированной средой разработки) для подписывания пакета драйвера. Дополнительные сведения см. в приложении 2. Подписывание драйверов с помощью Visual Studio .

  2. Создайте папку пакета драйверов и скопируйте файлы драйверов, сохраняя необходимые вложенные каталоги, например C:\DriverTestPackage.

  3. Создайте inf-файл для пакета драйвера. Проверьте inf-файл с помощью средства InfVerif из WDK в inf-файле, чтобы не сообщалось об ошибке.

  4. Отрывок из создания тестовых сертификатов:

    Следующий пример командной строки использует MakeCert для выполнения следующих задач:

    • Создайте самозаверяющий сертификат теста с именем Contoso.com(Test). Этот сертификат использует то же имя для имени субъекта и центра сертификации (ЦС).

    • Поместите копию сертификата в выходной файл, который называется ContosoTest.cer.

    • Поместите копию сертификата в хранилище сертификатов с именем PrivateCertStore. Размещение тестового сертификата в PrivateCertStore сохраняет его отдельно от других сертификатов, которые могут находиться в системе.

    Используйте следующую команду MakeCert, чтобы создать сертификат Contoso.com(Test ):

    makecert -r -pe -ss PrivateCertStore -n CN=Contoso.com(Test) ContosoTest.cer
    

    Где:

    • Параметр -r создает самозаверяющий сертификат с тем же именем издателя и субъекта.

    • Параметр -pe указывает, что закрытый ключ, связанный с сертификатом, можно экспортировать.

    • Параметр -ss указывает имя хранилища сертификатов, содержащего тестовый сертификат (PrivateCertStore).

    • Параметр -n CN= указывает имя сертификата, Contoso.com(Test). Это имя используется с средством SignTool для идентификации сертификата.

    • ContosoTest.cer — это имя файла, содержащее копию тестового сертификата, Contoso.com(Test). Файл сертификата используется для добавления сертификата в хранилище сертификатов доверенных корневых центров сертификации и в хранилище сертификатов доверенных издателей.

    Отрывок из просмотра тестовых сертификатов:

    После создания сертификата и копирования в хранилище сертификатов можно использовать оснастку сертификатов консоли управления Майкрософт (MMC) для просмотра. Чтобы просмотреть сертификат с помощью оснастки "Сертификаты MMC", сделайте следующее:

    1. Чтобы запустить оснастку "Сертификаты", запустите Certmgr.msc.

    2. В левой области оснастки "Сертификаты" разверните папку хранилища сертификатов PrivateCertStore и дважды щелкните сертификаты.

    На следующем снимке экрана показана оснастка "Сертификаты" в папке хранилища сертификатов PrivateCertStore .

    Снимок экрана хранилища сертификатов, показывающий тестовый сертификат.

    Чтобы просмотреть сведения о сертификате Contoso.com(Тест), дважды щелкните сертификат в правой области. На следующем снимку экрана показаны сведения о сертификате.

    Снимок экрана: окно сертификата, отображающее общие сведения о сертификате contoso.com (тест).

    Обратите внимание, что диалоговое окно "Сертификат сертификата" указывает: "Этот корневой сертификат ЦС не является доверенным. Чтобы включить доверие, установите этот сертификат в хранилище доверенных корневых центров сертификации". Это ожидаемое поведение. Сертификат не может быть проверен, так как Windows по умолчанию не доверяет центру выдачи Contoso.com(тест).

  5. Создайте файл каталога (расширение CAT). Используйте средство inf2cat, как показано ниже, чтобы создать файл каталога. Обратите внимание, что для коммутаторов не разрешено пространство , /driver:<no><space full path>, /os: :<no space os1 name>,:<no space><><os2 name>.

    inf2cat  /v  /driver:C:\DriverTestPackage  /os:7_64,7_x86 ,XP_X86
    

    При этом создается файл каталога с именем, указанным в INF-файле драйвера. Дополнительные разделенные запятыми OS можно добавлять выборочно или все, как показано ниже без пробелов.

    /os:2000,XP_X86,XP_X64,Server2003_X64,Vista_X64,Vista_X86,7_x86,7_64,Server2008_x86,Server2008_x64,Sever2008_IA64,Server2008R2_x86,Server2008R2_x64,Server2008R2_IA64,8_x86,8_x64, 8_ARM, Server8_x64
    

    Обновленный inf2cat из нового 8.1 WDK имеет значения параметра /os 6_3_X86, 6_3_X64, 6_3_ARM и SERVER_6_3_X64.

    Пример INF-файла для раздела "Версия".

    [Version]
    Signature="$WINDOWS NT$"
    Class=TOASTER
    ClassGuid={B85B7C50-6A01-11d2-B841-00C04FAD5171}
    Provider=%ToastRUs%
    DriverVer=09/21/2006,6.0.5736.1
    CatalogFile.NTx86 = tostx86.cat
    CatalogFile.NTIA64 = tostia64.cat
    CatalogFile.NTAMD64 = tstamd64.cat
    PnpLockdown = 1
    

    Параметр /driver (или /drv) указывает каталог, содержащий один или несколько INF-файлов. В этом каталоге файлы каталога создаются для этих INF-файлов, содержащих одну или несколько директив CatalogFile. Имя файла каталога не ограничено именем 8.3.

    Inf2Cat создает файл каталога tstamd64.cat, если используется аргумент командной строки /os:7_X64. Аналогичным образом средство создает файл каталога toastx86.cat, если параметр /os:XP_X86 используется аналогичным образом для Server2008R2_IA64. Если требуется только один файл каталога, то достаточно только одна запись в INF-файле, как показано ниже.

    CatalogFile.NT = toaster.cat
    

    или

    CatalogFile = toaster.cat
    

    Если дата в INF-файле не превышает дату выпуска ОС, то следующая ошибка будет сообщаться средством inf2cat, если параметр /os был для Windows 7 и дата, заданная в INF-файле, была более ранней датой.

    Signability test failed.
    Errors:
    22.9.7: DriverVer set to incorrect date (must be postdated to 4/21/2009 for newest OS) in \toaster.inf
    

    Средство inf2cat очень строго проверяет каждую папку и вложенную папку о присутствии каждого файла с записью в INF-файле. В таких отсутствующих записях будут значимые сообщения об ошибках.

    Файл cat можно открыть из обозревателя, дважды щелкнув или щелкнув файл правой кнопкой мыши и выбрав команду "Открыть". На вкладке "Безопасность" отображаются некоторые записи со значениями GUID. При выборе значения GUID отображаются сведения, включая файлы драйверов пакета драйвера и добавленные OSes, как показано ниже:

    OSAttr  2:5.1,6.1
    

    Номер 5.1 — номер версии для ОС XP и 6.1 для ОС Windows 7.0.

    Рекомендуется проверить наличие файлов драйверов и выбранных OSes. В любое время, если любой файл драйвера добавлен или удален, INF-файл был изменен, файл cat должен быть повторно создан и подписан еще раз. Любое упущение здесь приведет к ошибкам установки, сообщающимся в файле журнала установки (setupapi.dev.log для Vista и более поздней версии или setupapi.log файла для XP).

  6. Отрывок из файла каталога пакета драйвера для тестирования:

    В следующей командной строке показано, как запустить SignTool для выполнения следующих действий:

    • Протестируйте файл каталога tstamd64.cat примера драйвера ToastPkg. Дополнительные сведения о создании этого файла каталога см. в разделе "Создание файла каталога для проверки подписывания пакета драйвера".

    • Используйте сертификат Contoso.com(Test) из PrivateCertStore для тестовой подписи. Дополнительные сведения о создании этого сертификата см. в разделе "Создание тестовых сертификатов".

    • Метка времени определяет цифровую подпись через центр метки времени (TSA).

    Чтобы протестировать файл каталога tstamd64.cat , выполните следующую командную строку:

    signtool sign /v /s PrivateCertStore /n Contoso.com(Test) /t http://timestamp.digicert.com tstamd64.cat
    

    Где:

    • Команда подписи настраивает SignTool для подписи указанного файла каталога tstamd64.cat.

    • Параметр /v включает подробные операции, в которых SignTool отображает сообщения об успешном выполнении и предупреждении.

    • Параметр /s указывает имя хранилища сертификатов (PrivateCertStore), содержащего тестовый сертификат.

    • Параметр /n указывает имя сертификата (Contoso.com(test)), установленного в указанном хранилище сертификатов.

    • Параметр /t указывает URL-адрес TSA (http://timestamp.digicert.com), который будет меткой цифровой подписи.

    Внимание

    Включение метки времени предоставляет необходимые сведения для отзыва ключей в случае компрометации закрытого ключа подписывающего кода подписывающего ключа.

  • tstamd64.cat указывает имя файла каталога, который будет цифровая подпись.

tstamd64.cat указывает имя файла каталога, который будет подписывался цифровой подписью. Файл cat можно открыть, как описано выше.

  1. Изменен фрагмент кода из тестового подписывания драйвера с помощью внедренной подписи:

    • В 64-разрядных версиях Windows Vista и более поздних версиях Windows требования к подписи кода в режиме ядра, что драйвер начального запуска должен иметь внедренную подпись. Это необходимо независимо от того, имеет ли пакет драйвера файл каталога с цифровой подписью.

    Ниже приведена команда для внедрения двоичного файла драйвера режима ядра.

    signtool sign  /v  /s  PrivateCertStore  /n  Contoso.com(Test)  /t http://timestamp.digicert.com   amd64\toaster.sys
    

    AMD64\toaster.sys указывает имя двоичного файла в режиме ядра, который будет подписан внедрением.

    В каталоге установки WDK 7.1 образец тостера находится в каталоге src\general\тостер\toastpkg\toastcd\. Примеры Windows 8 или 8.1 WDK должны быть загружены с сайта загрузки Майкрософт. Примеры не входят в комплект драйверов Windows 8 или 8.1.

    Файл каталога при открытии дважды щелкнув файл в проводнике Windows, вы увидите следующий снимок экрана. Обратите внимание, что теперь выделена подпись представления.

    Снимок экрана: общие сведения о файле каталога безопасности.

    Если выбрать "Просмотреть подпись", вы увидите снимок экрана, приведенный ниже, указав следующий параметр просмотра в разделе "Просмотр сертификата", который затем предоставит параметр "Установить сертификат" в самом диалоговом окне. Ниже мы предоставляем предпочтительный вариант командной строки установки сертификата с помощью средства certmgr.exe.

    Снимок экрана с общими сведениями о цифровых подписях.

    Снимок экрана с общими сведениями о сертификате.

Теперь драйвер можно протестировать на компьютере подписывания или тестовом компьютере. Если вы используете тестовый компьютер, скопируйте пакет драйвера на компьютер, сохраняя структуру файлов без изменений. Средство certmgr.exe также необходимо скопировать на тестовый компьютер. При использовании тестового компьютера скопируйте пакет драйвера toastpkg, подписанный тестом, в папку c:\тостер временных.

В следующей процедуре описаны шаги, которые необходимо использовать на любом компьютере для тестирования драйвера:

  1. В командном окне с повышенными привилегиями выполните следующую команду:

    bcdedit  /set  testsigning  on
    

    Перезагрузите компьютер.

  2. Выбранные фрагменты из использования CertMgr для установки тестовых сертификатов на тестовом компьютере:

    Скопируйте файл сертификата (.cer), который использовался для тестирования драйверов подписи на тестовый компьютер. Файл сертификата можно скопировать в любой каталог на тестовом компьютере.

    Следующая команда CertMgr добавляет сертификат в файл сертификата CertificateFileName.cer в хранилище сертификатов доверенных корневых центров сертификации на тестовом компьютере:

    CertMgr.exe /add CertificateFileName.cer /s /r localMachine root
    

    Следующая команда CertMgr добавляет сертификат в файл сертификата CertificateFileName.cer в хранилище сертификатов доверенных издателей на тестовом компьютере:

    CertMgr.exe /add CertificateFileName.cer /s /r localMachine trustedpublisher
    

    Где (фрагменты из CertMgr):

    /add CertificateName

    Добавляет сертификат в указанный файл сертификата в хранилище сертификатов.

    /s

    Указывает, что хранилище сертификатов является системным хранилищем.

    /r RegistryLocation

    Указывает, что расположение реестра системного хранилища находится в HKEY_LOCAL_MACHINE.

    CertificateStore

    Указывает хранилище сертификатов, доверенныйpublisher, аналогично "localMachine root".

    Перезагрузите компьютер. Теперь можно запустить Certmgr.msc и убедиться, что ContosoTest.cer отображается в указанных выше двух расположениях. Если сертификат не отображается, то другой способ установки сертификата — открыть сертификат и установить его на указанных выше двух узлах и проверить его снова.

  3. Убедитесь, что подписывание файла cat и файла sys. Откройте командное окно с повышенными привилегиями и при условии, что signtool.exe доступен на компьютере, перейдите в каталог пакета драйверов, где находятся файлы cat, inf и sys. Выполните следующие команды в соответствующем каталоге.

    Проверка подписи SPC файла каталога:

    signtool  verify  /v  /kp  /c  tstamd64.cat  toaster.inf
    

    Чтобы проверить знак внедрения, выполните следующую команду.

    Проверка подписи файла драйвера, подписанного выпуска:

    signtool  verify  /v  /kp  toaster.sys
    

    Приведенные выше команды создают одну ошибку, так как она подписана, и сертификат не был доверенным сертификатом.

    SignTool Error: A certificate chain processed, but terminated in a root certificate which is not trusted by the trust provider.
    

    Приведенные выше две команды проверки будут очень полезны при подписи выпуска, которые будут рассмотрены позже.

    Теперь драйвер готов к установке и тестированию на тестовом компьютере. Всегда рекомендуется правильно установить следующий раздел реестра для сбора подробных журналов в файле setupapi.dev.log (для Windows Vista и более поздних операционных систем) во время установки.

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\Loglevel=0x4800FFFF

    В файле %SystemRoot%\inf переименуйте файл setupapi.dev.log перед установкой драйвера. После установки будет создан новый файл журнала setupapi.dev.log, который будет содержать ценные сведения, возникающие во время установки.

    После успешной установки драйвера его можно протестировать на компьютере разработки или на тестовом компьютере.

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

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

  1. С помощью средства Pnputil (pnputil.exe) ос.

  2. С помощью средства Devcon (devcon.exe), являющегося средством командной строки WDK для установки драйверов, но не распространяемых. Пример кода средства Devcon представлен в WDK. Для распространения можно реализовать собственное средство Devcon из примера кода и распространить версию средства.

Установка и удаление пакета драйвера с помощью PnpUtil

Установка пакета драйвера:

  1. Откройте командное окно с повышенными привилегиями и задайте для каталога по умолчанию значение c:\тостер.

  2. Выполните одну из следующих команд:

    • Чтобы просто выполнить этап пакета драйвера, выполните следующие действия. pnputil /add-driver toaster.inf

    • Чтобы выполнить этап драйвера и установить его на существующих устройствах, выполните следующие действия. pnputil /add-driver toaster.inf /install

Удаление пакета драйвера:

  1. Откройте командное окно с повышенными привилегиями.

  2. Определите имя OEM INF, соответствующего пакету драйвера, который требуется удалить из списка, возвращенного pnputil /enum-drivers

  3. Выполните pnputil /delete-driver \<OEM INF name> /uninstall.

Установка и удаление пакета драйвера с помощью DevCon

Установка пакета драйвера:

  1. Откройте командное окно с повышенными привилегиями и задайте для каталога по умолчанию значение c:\тостер.

  2. Devcon.exe предоставляется в каталоге инструментов WDK версии x86, amd64 и версии ia64. Скопируйте соответствующую версию в каталог c:\тостер и выполните следующую команду.

    devcon.exe update <inf> <hwid>
    

    Рекомендуется использовать кавычки вокруг <hwid>. Для образца тостера это будет:

    devcon.exe update c:\toaster\toaster.inf "{b85b7c50-6a01-11d2-b841-00c04fad5171}\MsToaster"
    

Удаление пакета драйвера:

Пакет драйвера не следует удалять из системы, пока устройство по-прежнему использует его. Если устройство должно быть удалено для удаления пакета драйверов, устройство можно удалить с помощью средства Devcon с помощью переключателя remove. devcon.exe /? отображает все переключатели для этого средства. Чтобы получить определенные сведения об использовании переключателя, необходимо добавить "справка", как показано ниже для переключателя remove.

devcon.exe help remove

После удаления устройства для удаления драйвера необходимо выполнить две команды. Используйте первую команду с параметром "dp_enum", чтобы найти имя файла драйвера, соответствующее пакету драйвера, установленному на компьютере.

devcon dp_enum

Эта команда отобразит список всех файлов oemNnn.inf, соответствующих пакету драйвера, где Nnn является десятичным числом с сведениями о классе и предоставленными сведениями, как показано ниже.

oem39.inf
    Provider: Intel
    Class: Network adapters
oem4.inf
    Provider: Dell
    Class: ControlVault Device

Чтобы удалить соответствующий пакет драйверов из DriverStore, используйте следующую команду, показанную ниже для драйвера Intel Network Adapters:

devcon.exe dp_delete oem39.inf

Убедитесь, что тестовый драйвер работает правильно

Чтобы убедиться, что Toastpkg работает правильно:

  1. Запуск диспетчер устройств

  2. Выберите тостер из списка устройств. Пример см. на снимок экрана ниже.

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

  3. Чтобы открыть диалоговое окно "Свойства драйвера", дважды щелкните "Образец пакета тостера" и выберите "Свойства"

  4. Чтобы убедиться, что тостер работает правильно, на вкладке "Общие" установите флажок "Состояние устройства"

диспетчер устройств можно использовать для удаления устройства и драйвера из диалогового окна "Свойства".

Устранение неполадок с тестируемыми драйверами

Сведения об устранении неполадок при установке подписывания драйверов см. в случае возникновения проблем с этими процедурами.