Создание сертификата для подписи пакета приложения

Важно!

MakeCert.exe не рекомендуется. Текущие рекомендации по созданию сертификата см. в статье "Создание сертификата для подписи пакета".

 

Узнайте, как использовать MakeCert.exe и Pvk2Pfx.exe для создания сертификата подписи тестового кода, чтобы подписать пакеты приложений Windows.

Перед их развертыванием необходимо подписать упакованные приложения Windows. Если вы не используете Microsoft Visual Studio 2012 для создания и подписывания пакетов приложений, необходимо создать собственные сертификаты подписи кода и управлять ими. Сертификаты можно создавать с помощью MakeCert.exe и Pvk2Pfx.exe из комплекта драйверов Windows (WDK). Затем можно использовать сертификаты для подписывания пакетов приложений, чтобы их можно было развернуть локально для тестирования.

Это важно знать

Технологии

Необходимые компоненты

  • средства MakeCert.exe и Pvk2Pfx.exe из WDK

Instructions

Шаг 1. Определение имени издателя пакета

Чтобы создать сертификат подписи с помощью пакета приложения, который вы хотите подписать, имя субъекта сертификата подписи должно соответствовать атрибуту Publisher элемента Identity в AppxManifest.xml для этого приложения. Например, предположим, что AppxManifest.xml содержит:

  <Identity Name="Contoso.AssetTracker" 
    Version="1.0.0.0" 
    Publisher="CN=Contoso Software, O=Contoso Corporation, C=US"/>

Для параметра publisherName, указанного с помощью служебной программы MakeCert на следующем шаге, используйте команду CN=Contoso Software, O=Contoso Corporation, C=US.

Примечание.

Эта строка параметра указана в кавычках и учитывает регистр и пробелы.

 

Строка атрибута Publisher, определенная для элемента Identity в AppxManifest.xml, должна совпадать со строкой, указанной с параметром MakeCert /n для имени субъекта сертификата. Скопируйте и вставьте строку по возможности.

Шаг 2. Создание закрытого ключа с помощью MakeCert.exe

Используйте служебную программу MakeCert для создания самозаверяющего сертификата и закрытого ключа:

MakeCert /n publisherName /r /h 0 /eku "1.3.6.1.5.5.7.3.3,1.3.6.1.4.1.311.10.3.13" /e 
expirationDate /sv MyKey.pvk MyKey.cer

Эта команда задает пароль для PVK-файла. Рекомендуется выбрать надежный пароль и сохранить закрытый ключ в безопасном расположении.

Мы рекомендуем использовать предлагаемые параметры в предыдущем примере по следующим причинам:

/R

Создает самозаверяющий корневой сертификат. Это упрощает управление для тестового сертификата.

/h 0

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

/Eku

Задает значения расширенного использования ключей (EKU) для сертификата.

Примечание.

Не помещайте пробел между двумя значениями с разделителями-запятыми.

 

  • 1.3.6.1.5.5.7.3.3 указывает, что сертификат действителен для подписи кода. Всегда указывайте это значение, чтобы ограничить предполагаемое использование сертификата.
  • 1.3.6.1.4.1.311.10.3.13 указывает, что сертификат учитывает подписывание времени существования. Как правило, если сигнатура сигнатура имеет метку времени, если сертификат был действителен в момент отметки времени, подпись остается допустимой, даже если срок действия сертификата истекает. Этот EKU заставляет подпись истекать независимо от того, является ли подпись меткой времени.

/E

Задает дату окончания срока действия сертификата. Укажите значение параметра expirationDate в формате мм/дд/гггг. Рекомендуется выбрать дату окончания срока действия только до тех пор, пока это необходимо для целей тестирования, как правило, меньше года. Эта дата окончания срока действия в сочетании с EKU подписывания времени существования может помочь ограничить окно, в котором сертификат может быть скомпрометирован и неправильно использован.

Дополнительные сведения о других параметрах см. в разделе MakeCert.

Шаг 3. Создание файла обмена персональными данными (PFX) с помощью Pvk2Pfx.exe

Используйте служебную программу Pvk2Pfx для преобразования PVK-файлов и .cer файлов, созданных MakeCert в PFX-файл, который можно использовать с SignTool для подписи пакета приложения:

Pvk2Pfx /pvk MyKey.pvk /pi pvkPassword /spc MyKey.cer /pfx MyKey.pfx [/po pfxPassword]

Файлы MyKey.pvk и MyKey.cer являются теми же файлами, которые MakeCert.exe созданы на предыдущем шаге. Используя необязательный параметр /po, можно указать другой пароль для результирующего PFX-файла; в противном случае PFX имеет тот же пароль, что и MyKey.pvk.

Дополнительные сведения о других параметрах см. в разделе Pvk2Pfx.

Замечания

После создания PFX-файла можно использовать файл с SignTool для подписывания пакета приложения. Дополнительные сведения см. в разделе "Как подписать пакет приложения с помощью SignTool". Но сертификат по-прежнему не доверяется локальному компьютеру для развертывания пакетов приложений, пока он не будет установлен в хранилище доверенных сертификатов локального компьютера. Вы можете использовать Certutil.exe, которая поставляется с Windows.

Установка сертификатов с помощью WindowsCertutil.exe

  1. Запустите Cmd.exe от имени администратора.

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

    Certutil -addStore TrustedPeople MyKey.cer
    

Рекомендуется удалить сертификаты, если они больше не используются. В той же командной строке администратора выполните следующую команду:

Certutil -delStore TrustedPeople certID

Идентификатор сертификата — это серийный номер сертификата. Выполните следующую команду, чтобы определить серийный номер сертификата:

Certutil -store TrustedPeople

Соображения безопасности

Добавив сертификат в хранилища сертификатов локального компьютера, вы влияете на доверие сертификатов всех пользователей на компьютере. Рекомендуется установить все сертификаты подписывания кода, которые требуется протестировать пакеты приложений в надежном хранилище сертификатов Люди. Немедленно удалите эти сертификаты, если они больше не нужны, чтобы предотвратить их использование для компрометации доверия системы.

Примеры

Создание примера пакета приложения

Основные понятия

Рекомендации по подписанию кода

Как подписать пакет приложения с помощью SignTool

Подписывание пакета приложения