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

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

Подписывание выпуска определяет издателя двоичных файлов в режиме ядра или пользовательском режиме (например, .sys или .dll файлов), которые загружаются в Windows Vista и более поздних версиях Windows.

Двоичные файлы в режиме ядра подписываются с помощью:

  1. Windows Hardware Quality Lab (WHQL, также известный как Winqual), для выпуска подписывает пакет драйверов. Подпись выпуска WHQL получается в рамках программы сертификации Windows. В приведенной ниже ссылке описаны пять шагов от начала до конца программы сертификации Windows. Дополнительные сведения об этом параметре см. в разделе Сертификация оборудования Для Windows: начните здесь . Все вопросы, касающиеся действий по ссылке выше, следует направлять в службу технической поддержки панели мониторинга Центра партнеров.
  2. Вместо использования программы WHQL можно выпускать пакет драйверов, подписанный разработчиками и поставщиками драйверов. Эта программа запущена с выпуска ОС Vista. Подпись выпуска создается с помощью сертификата издателя программного обеспечения (SPC). SPC получается от стороннего центра сертификации (ЦС), который уполномочен корпорацией Майкрософт выдавать такие сертификаты. Подписи, созданные с помощью этого типа SPC, также соответствуют требованиям к подписи драйверов PnP для 64-разрядных и 32-разрядных версий Windows Vista и более поздних версий Windows.

Шаги, необходимые для выпуска подписи пакета драйвера для метода 2, описаны далее.

Получение сертификата издателя программного обеспечения (SPC)

Для подписывания выпуска требуется сертификат подписи кода, также называемый сертификатом издателя программного обеспечения (SPC) из коммерческого ЦС.

Раздел Cross-Certificates for Kernel Mode Code Signing (Перекрестные сертификаты для подписи кода в режиме ядра ) содержит список коммерческих сторонних центров сертификации (ЦС), авторизованных корпорацией Майкрософт. Перечисленные поставщики ЦС должны быть использованы для предоставления сертификата издателя программного обеспечения (SPC) для подписи пакета драйвера.

Следуйте инструкциям ЦС, чтобы получить SPC и установить закрытый ключ на компьютере подписывания. Обратите внимание, что SPC является проприетарным инструментом поставщика драйверов, который запросил его для подписания пакета драйверов. SPC, закрытый ключ и пароль не должны предоставляться кому-либо за пределами организации запрашивающего поставщика.

Перекрестные сертификаты

Выдержка изсертификата издателя программного обеспечения:

Помимо получения SPC, необходимо получить перекрестный сертификат, выданный корпорацией Майкрософт. Перекрестный сертификат используется для проверки того, что ЦС, выдавший SPC, является доверенным корневым центром. Перекрестный сертификат — это сертификат X.509, выданный ЦС, который подписывает открытый ключ для корневого сертификата другого ЦС. Перекрестные сертификаты позволяют системе иметь единый доверенный корневой центр Майкрософт, но также обеспечивают гибкость для расширения цепочки доверия на коммерческие ЦС, которые выдают SPC.

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

Выбранные фрагменты израздела Cross-Certificates for Kernel Mode Code Signing (Подписывание кода в режиме ядра):

Перекрестный сертификат — это цифровой сертификат, выданный одним центром сертификации (ЦС), который используется для подписи открытого ключа для корневого сертификата другого центра сертификации. Перекрестные сертификаты позволяют создать цепочку доверия между одним доверенным корневым ЦС и несколькими другими ЦС.

В Windows перекрестные сертификаты:

  • Разрешить ядру операционной системы иметь один доверенный корневой центр Майкрософт.
  • Расширение цепочки доверия для нескольких коммерческих центров сертификации, которые выдают сертификаты издателя программного обеспечения (SPC), которые используются для подписывания кода для распространения, установки и загрузки в Windows

Предоставляемые здесь кросс-сертификаты используются с инструментами подписывания кода пакета драйверов Windows (WDK) для правильной подписи программного обеспечения в режиме ядра. Программное обеспечение для цифровой подписи в режиме ядра похоже на подписывание кода любого программного обеспечения, опубликованного для Windows. Перекрестные сертификаты добавляются в цифровую подпись разработчиком или издателем программного обеспечения при подписи программного обеспечения в режиме ядра. Сам перекрестный сертификат добавляется средствами подписи кода в цифровую подпись двоичного файла или каталога.

Выбор правильного перекрестного сертификата

Корпорация Майкрософт предоставляет определенный кросс-сертификат для каждого ЦС, который выдает SPC для кода с подписыванием кода в режиме ядра. Дополнительные сведения о перекрестных сертификатах см. в разделе Cross-Certificates for Kernel Mode Code Signing. В этом разделе перечислены имена авторизованных поставщиков ЦС Майкрософт и правильный кросс-сертификат для корневого центра, выдавшего ваш SPC. Найдите правильный кросс-сертификат для SPC, выданного поставщиком ЦС, и скачайте его на компьютер подписи, который будет использоваться для подписи выпуска, и сохраните его в каталоге драйверов. Рекомендуется указать абсолютный путь к этому сертификату при его использовании в любой команде подписывания.

Установка сведений SPC в личное хранилище сертификатов

Дополнительные выдержки изсертификата издателя программного обеспечения:

Чтобы использовать SPC для подписи драйвера способом, соответствующим политике подписывания кода в режиме ядра, сведения о сертификате должны быть сначала содержаться в PFX-файле обмена личной информацией. Затем сведения, содержащиеся в PFX-файле , должны быть добавлены в личное хранилище сертификатов локального компьютера, который подписывает драйвер.

ЦС может выдать PFX-файл , содержащий необходимые сведения о сертификате. Если это так, можно добавить . PFX-файл в хранилище личных сертификатов, следуя инструкциям, описанным в разделе Установка PFX-файла в личное хранилище сертификатов.

Однако ЦС может выдавать следующие пары файлов:

  • PVK-файл, содержащий сведения о закрытом ключе.

  • Файл SPC или CER , содержащий сведения об открытом ключе.

В этом случае пара файлов ( PVK и SPC илиPVK и CER) должна быть преобразована в PFX-файл , чтобы добавить сведения о сертификате в личное хранилище сертификатов.

Создание объекта . PFX-файл из пары файлов, выданных ЦС, следуйте следующим инструкциям:

  • Чтобы преобразовать PVK-файл и SPC-файл в PFX-файл , используйте следующую команду Pvk2Pfx в командной строке:

    Pvk2Pfx -pvk mypvkfile.pvk -pi mypvkpassword -spc myspcfile.spc -pfx mypfxfile.pfx -po pfxpassword -f
    
  • Чтобы преобразовать PVK-файл и CER-файл в PFX-файл , используйте следующую команду Pvk2Pfx в командной строке:

    Pvk2Pfx -pvk mypvkfile.pvk -pi mypvkpassword -spc mycerfile.cer -pfx mypfxfile.pfx -po pfxpassword -f
    

Ниже описаны параметры, используемые в команде Pvk2Pfx :

  • Параметр -pvkmypvkfile.pvk указывает PVK-файл .

  • Параметр -pimypvkpassword указывает пароль для . PVK-файл .

  • Параметр -spcmyspcfile.spc указывает SPC-файл , а параметр -spcmycerfile.cer указывает CER-файл .

  • Параметр -pfxmypfxfile.pfx указывает имя PFX-файла .

  • Параметр -popfxpassword указывает пароль для PFX-файла .

  • Параметр -f настраивает Pvk2Pfx на замену существующего PFX-файла , если он существует.

[! IMPORTANY] Защита PVK- и PFX-файлов с помощью надежных паролей.

Установка PFX-файла в личном хранилище сертификатов

Для подписывания драйверов режима ядра сертификаты и ключи, хранящиеся в PFX-файле, должны быть импортированы в локальное хранилище личных сертификатов. Signtool не поддерживает использование PFX-файлов для подписывания драйверов режима ядра. Ограничение связано с конфликтом при добавлении кросс-сертификатов в сигнатуру при использовании сертификата из PFX-файла.

Окончательные выдержки изсертификата издателя программного обеспечения:

После получения PFX-файла из ЦС или создания PFX-файла из PVK и . SPC или CER-файл , добавьте сведения из PFX-файла в личное хранилище сертификатов локального компьютера, подписывающего драйвер. Мастер импорта сертификатов можно использовать для импорта сведений из PFX-файла в личное хранилище сертификатов следующим образом:

  1. Найдите PFX-файл в Windows Обозреватель и дважды щелкните его, чтобы открыть мастер импорта сертификатов.

  2. Выполните процедуру, описанную в мастере импорта сертификатов, чтобы импортировать сертификат подписи кода в личное хранилище сертификатов.

Выдержка изстатьи Импорт SPC в хранилище сертификатов:

Начиная с Windows Vista альтернативным способом импорта PFX-файла в локальное хранилище личных сертификатов является служебная программа командной строки CertUtil . В следующем примере командной строки используется CertUtil для импорта файла abc.pfx в личное хранилище сертификатов:

certutil -user -p pfxpassword -importPFX abc.pfx

Где:

  • Параметр -user указывает личное хранилище "Текущий пользователь".

  • Параметр -p задает пароль для PFX-файла (pfxpassword).

  • Параметр -importPFX указывает имя PFX-файла (abc.pfx).

Просмотр свойств SPC

Используйте оснастку "Сертификаты MMC" (certmgr.msc) для просмотра сертификатов в личном хранилище сертификатов.

  1. Запустите оснастку "Сертификаты" certmgr.msc.
  2. В левой области оснастки выберите папку Личное хранилище сертификатов.
  3. Щелкните папку Сертификаты и дважды щелкните сертификат, который будет использоваться для подписи выпуска.
  4. На вкладке Сведения диалогового окна Сертификат выберите Тема в списке полей, чтобы выделить имя субъекта сертификата. Это имя, которое используется с аргументом /n Signtool в примерах в этом разделе.

Сертификат для подписи маркера

На основеподписывания выпуска файла каталога пакета драйверов:

Выполните следующие команды, чтобы подписать cat-файл, который подписывает пакет драйвера. Команда /n должна использовать имя сертификата в кавычках, которое вы увидите в разделе Тема на шаге 4 выше, как CN= MyCompany Inc.

signtool sign /v /ac MSCV-VSClass3.cer /s My /n “MyCompany Inc.“ /t http://timestamp.digicert.com toaster.cat

/ac FileName

Указывает файл, содержащий дополнительный сертификат для добавления в блок подписи. Это сертификат перекрестной подписи MSCV-VSClass3.cer, полученный по ссылке для скачивания кросс-сертификатов Майкрософт. Используйте полное имя пути, если перекрестный сертификат не находится в текущем каталоге. Хотя это и не обязательно, рекомендуется добавить перекрестный сертификат при подписи файла cat.

/s StoreName

Указывает хранилище, которое открывается при поиске сертификата. Если этот параметр не указан, откроется хранилище My Store, которое является хранилищем личных сертификатов.

/n SubjectName

Задает имя субъекта сертификата подписи. Это значение может быть подстрокой полного имени субъекта.

URL-адрес /t

Задает URL-адрес сервера отметок времени. Если этот параметр отсутствует, подписанный файл не будет иметь метку времени. При использовании меток времени подписанный пакет драйвера остается действительным на неопределенный срок до тех пор, пока сертификат подписи SPC не будет отозван по другим причинам.

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

SignTool Error: No certificates were found that met all the given criteria

Внедрение подписывания

На основеподписывания выпуска драйвера с помощью внедренной подписи:

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

Драйвер запуска загрузки в режиме ядра должен иметь сигнатуру встроенного сертификата издателя программного обеспечения (SPC). Это относится к любому типу драйвера PnP или без PnP в режиме запуска ядра. Также применяется к 32-разрядным версиям Windows. Драйвер режима ядра PnP, который не является драйвером запуска загрузки, должен иметь внедренную подпись SPC, файл каталога с подписью выпуска WHQL или файл каталога с подписью SPC.

Дополнительные сведения см. в разделе Требования к подписывание кода в режиме ядра .

Команда для внедрения подписывания файла toaster.sys.

signtool sign /v /ac MSCV-VSClass3.cer /s my /n “MyCompany Inc. “ /t http://timestamp.digicert.com toaster.sys

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

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

Выходные данные команды

Verifying: toaster.inf
File is signed in catalog: toaster.cat
Hash of file (sha1): 580C2A24C3A9E12817E18ADF1C4FE9CF31B01EA3

Signing Certificate Chain:

    Issued to: VeriSign Class 3 Public Primary Certification Authority - G5
    Issued by: VeriSign Class 3 Public Primary Certification Authority - G5
    Expires:   Wed Jul 16 15:59:59 2036
    SHA1 hash: 4EB6D578499B1CCF5F581EAD56BE3D9B6744A5E5

        Issued to: VeriSign Class 3 Code Signing 2010 CA
        Issued by: VeriSign Class 3 Public Primary Certification Authority - G5
        Expires:   Fri Feb 07 15:59:59 2020
        SHA1 hash: 495847A93187CFB8C71F840CB7B41497AD95C64F

            Issued to: Contoso, Inc
            Issued by: VeriSign Class 3 Code Signing 2010 CA
            Expires:   Thu Dec 04 15:59:59 2014
            SHA1 hash: EFC77FA6BA295580C2A2CD25B56C00606CA21269

The signature is timestamped: Mon Jan 27 14:48:55 2014
Timestamp Verified by:
    Issued to: Thawte Timestamping CA
    Issued by: Thawte Timestamping CA
    Expires:   Thu Dec 31 15:59:59 2020
    SHA1 hash: BE36A4562FB2EE05DBB3D32323ADF445084ED656

        Issued to: Symantec Time Stamping Services CA - G2
        Issued by: Thawte Timestamping CA
        Expires:   Wed Dec 30 15:59:59 2020
        SHA1 hash: 6C07453FFDDA08B83707C09B82FB3D15F35336B1

            Issued to: Symantec Time Stamping Services Signer - G4
            Issued by: Symantec Time Stamping Services CA - G2
            Expires:   Tue Dec 29 15:59:59 2020
            SHA1 hash: 65439929B67973EB192D6FF243E6767ADF0834E4
Cross Certificate Chain:
    Issued to: Microsoft Code Verification Root
    Issued by: Microsoft Code Verification Root
    Expires:   Sat Nov 01 05:54:03 2025
    SHA1 hash: 8FBE4D070EF8AB1BCCAF2A9D5CCAE7282A2C66B3

 Issued to: VeriSign Class 3 Public Primary Certification Authority - G5
        Issued by: Microsoft Code Verification Root
        Expires:   Mon Feb 22 11:35:17 2021
        SHA1 hash: 57534CCC33914C41F70E2CBB2103A1DB18817D8B

            Issued to: VeriSign Class 3 Code Signing 2010 CA
            Issued by: VeriSign Class 3 Public Primary Certification Authority -  G5
            Expires:   Fri Feb 07 15:59:59 2020
            SHA1 hash: 495847A93187CFB8C71F840CB7B41497AD95C64F

                Issued to: Contoso, Inc
                Issued by: VeriSign Class 3 Code Signing 2010 CA
                Expires:   Thu Dec 04 15:59:59 2014
                SHA1 hash: EFC77FA6BA295580C2A2CD25B56C00606CA21269

Successfully verified: toaster.inf

Number of files successfully Verified: 1
Number of warnings: 0
Number of errors: 0

Обратите внимание на наличие корня проверки кода (Майкрософт) в цепочке сертификатов.

Затем проверка внедрить подписывание файла toaster.sys.

signtool verify  /v  /kp  toaster.sys

Выходные данные команды

Verifying: toaster.sys Hash of file (sha1): CCF5F5C02FEDE87D92FCB7B536DBF5D5EFDB7B41

Signing Certificate Chain:
    Issued to: VeriSign Class 3 Public Primary Certification Authority - G5
    Issued by: VeriSign Class 3 Public Primary Certification Authority - G5
    Expires:   Wed Jul 16 15:59:59 2036
    SHA1 hash: 4EB6D578499B1CCF5F581EAD56BE3D9B6744A5E5

        Issued to: VeriSign Class 3 Code Signing 2010 CA
        Issued by: VeriSign Class 3 Public Primary Certification Authority - G5
        Expires:   Fri Feb 07 15:59:59 2020
        SHA1 hash: 495847A93187CFB8C71F840CB7B41497AD95C64F

            Issued to: Contoso, Inc
            Issued by: VeriSign Class 3 Code Signing 2010 CA
            Expires:   Thu Dec 04 15:59:59 2014             SHA1 hash: EFC77FA6BA295580C2A2CD25B56C00606CA21269
The signature is timestamped: Mon Jan 27 14:48:55 2014 Timestamp Verified by:
    Issued to: Thawte Timestamping CA     Issued by: Thawte Timestamping CA     Expires:   Thu Dec 31 15:59:59 2020     SHA1 hash: BE36A4562FB2EE05DBB3D32323ADF445084ED656
        Issued to: Symantec Time Stamping Services CA - G2         Issued by: Thawte Timestamping CA         Expires:   Wed Dec 30 15:59:59 2020         SHA1 hash: 6C07453FFDDA08B83707C09B82FB3D15F35336B1
            Issued to: Symantec Time Stamping Services Signer - G4             Issued by: Symantec Time Stamping Services CA - G2             Expires:   Tue Dec 29 15:59:59 2020             SHA1 hash: 65439929B67973EB192D6FF243E6767ADF0834E4
Cross Certificate Chain:
    Issued to: Microsoft Code Verification Root     Issued by: Microsoft Code Verification Root     Expires:   Sat Nov 01 05:54:03 2025     SHA1 hash: 8FBE4D070EF8AB1BCCAF2A9D5CCAE7282A2C66B3
        Issued to: VeriSign Class 3 Public Primary Certification Authority - G5
        Issued by: Microsoft Code Verification Root
        Expires:   Mon Feb 22 11:35:17 2021
        SHA1 hash: 57534CCC33914C41F70E2CBB2103A1DB18817D8B

            Issued to: VeriSign Class 3 Code Signing 2010 CA
            Issued by: VeriSign Class 3 Public Primary Certification Authority -  G5
            Expires:   Fri Feb 07 15:59:59 2020
            SHA1 hash: 495847A93187CFB8C71F840CB7B41497AD95C64F
                Issued to: Contoso, Inc                 Issued by: VeriSign Class 3 Code Signing 2010 CA                 Expires:   Thu Dec 04 15:59:59 2014                 SHA1 hash: EFC77FA6BA295580C2A2CD25B56C00606CA21269
Successfully verified: toaster.sys
Number of files successfully Verified: 1 Number of warnings: 0 Number of errors: 0

Опять же, обратите внимание на наличие корня проверки кода (Майкрософт) в цепочке сертификатов.