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

В этой статье объясняется, как создать и экспортировать сертификат для подписывания пакета приложений с помощью средств PowerShell. Рекомендуется использовать Visual Studio для упаковки приложений UWP и упаковки классических приложений, но вы по-прежнему можете упаковать приложение вручную, если вы не использовали Visual Studio для разработки приложения.

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

  • Упакованое или распакованое приложение
    Приложение, содержащее файл AppxManifest.xml. При создании сертификата, который будет использоваться для подписи окончательного пакета приложения, вам потребуется ссылаться на файл манифеста. Дополнительные сведения о том, как вручную упаковать приложение, см. в статье "Создание пакета приложения" с помощью средства MakeAppx.exe.

  • Командлеты инфраструктуры открытых ключей (PKI)
    Для создания и экспорта сертификата подписи требуются командлеты PKI. Дополнительные сведения см. в разделе командлетов инфраструктуры открытых ключей.

Создание самозаверяющего сертификата

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

Примечание.

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

Определение темы упаковаемого приложения

Чтобы использовать сертификат для подписывания пакета приложения, субъект в сертификате должен соответствовать разделу Publisher в манифесте приложения.

Например, раздел Identity в файле AppxManifest.xml приложения должен выглядеть примерно так:

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

В этом случае "Издатель" — "CN=Contoso Software, O=Contoso Corporation, C=US", который необходимо использовать для создания сертификата.

Создание сертификата с помощью New-SelfSignedCertificate

Используйте командлет PowerShell New-SelfSignedCertificate для создания самозаверяющего сертификата. New-SelfSignedCertificate имеет несколько параметров для настройки, но для этой статьи мы сосредоточимся на создании простого сертификата, который будет работать с SignTool. Дополнительные примеры и использование этого командлета см. в разделе New-SelfSignedCertificate.

На основе файла AppxManifest.xml из предыдущего примера следует использовать следующий синтаксис для создания сертификата. В командной строке PowerShell с повышенными привилегиями:

New-SelfSignedCertificate -Type Custom -Subject "CN=Contoso Software, O=Contoso Corporation, C=US" -KeyUsage DigitalSignature -FriendlyName "Your friendly name goes here" -CertStoreLocation "Cert:\CurrentUser\My" -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.3", "2.5.29.19={text}")

Обратите внимание на следующие сведения о некоторых параметрах:

  • KeyUsage: этот параметр определяет, для чего может использоваться сертификат. Для самозаверяющего сертификата этот параметр должен иметь значение DigitalSignature.

  • TextExtension: этот параметр включает параметры для следующих расширений:

    • Расширенное использование ключей (EKU): это расширение указывает дополнительные цели, для которых может использоваться сертифицированный открытый ключ. Для самозаверяющего сертификата этот параметр должен содержать строку расширения "2.5.29.37={text}1.3.6.1.5.5.7.3.3", которая указывает, что сертификат будет использоваться для подписи кода.

    • Основные ограничения. Это расширение указывает, является ли сертификат центром сертификации (ЦС). Для самозаверяющего сертификата этот параметр должен содержать строку расширения "2.5.29.19={text}", которая указывает, что сертификат является конечной сущностью (а не ЦС).

После выполнения этой команды сертификат будет добавлен в локальное хранилище сертификатов, как указано в параметре -CertStoreLocation. Результат команды также создаст отпечаток сертификата.

Вы можете просмотреть сертификат в окне PowerShell с помощью следующих команд:

Set-Location Cert:\CurrentUser\My
Get-ChildItem | Format-Table Subject, FriendlyName, Thumbprint

При этом будут отображаться все сертификаты в локальном хранилище.

Экспорт сертификата

Чтобы экспортировать сертификат в локальном хранилище в PFX-файл, используйте командлет Export-PfxCertificate .

При использовании Export-PfxCertificate необходимо создать и использовать пароль или использовать параметр -ProtectTo, чтобы указать, какие пользователи или группы могут получить доступ к файлу без пароля. Обратите внимание, что ошибка будет отображаться, если вы не используете параметр "-Password" или "-ProtectTo".

Использование пароля

$password = ConvertTo-SecureString -String <Your Password> -Force -AsPlainText 
Export-PfxCertificate -cert "Cert:\CurrentUser\My\<Certificate Thumbprint>" -FilePath <FilePath>.pfx -Password $password

Использование ProtectTo

Export-PfxCertificate -cert Cert:\CurrentUser\My\<Certificate Thumbprint> -FilePath <FilePath>.pfx -ProtectTo <Username or group name>

После создания и экспорта сертификата вы можете подписать пакет приложения с помощью SignTool. Следующий шаг в процессе упаковки вручную см. в разделе "Подписыв пакет приложения с помощью SignTool".

Вопросы безопасности

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