Подпишите пакет MSIX: полное руководство

В этом руководстве описано, как подписать пакет MSIX для каждого этапа разработки — от локального тестирования до производственного распространения. Сравнение параметров подписывания и затрат см. в обзоре пакета MSIX.

Выбор подхода к подписи

Этап Рекомендуемый подход версия Windows
Локальная разработка и тестирование WinApp CLI (самозаверяющий сертификат) Windows 10 и более поздних версий
Распространение для тестировщиков (загрузка неопубликованных данных) Самоподписанный сертификат с шагом доверия сертификата Windows 10 и более поздних версий
Распределение продукции Azure подпись артефактов (прежнее название — Доверенная подпись) Windows 10 версии 1809 и более поздних версий Windows Server 2016 и более поздних версий
распределение Microsoft Store Подписан Магазином при отправке Все поддерживаемые версии Windows

Разработка: вход для локального тестирования

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

Это важно

В настоящее время интерфейс командной строки разработки приложение для Windows находится в public preview и требует Windows 10 с установленным WinGet.

Интерфейс командной строки WinApp обрабатывает создание сертификатов и вход на одном шаге.

Шаг 1. Установка интерфейса командной строки WinApp

winget install -e --id Microsoft.WinAppCLI --source winget

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

winapp cert generate --manifest .\appxmanifest.xml --output .\devcert.pfx --install

Флаг --manifest считывает имя издателя непосредственно из вашего appxmanifest.xml. Флаг --install добавляет сертификат в хранилище доверия локального компьютера, чтобы сразу же установить пакет.

Шаг 3. Подпишите пакет

winapp sign MyApp.msix --cert .\devcert.pfx

Вариант B: PowerShell + SignTool (Windows 10 и более поздних версий)

Используйте этот подход, если вы не используете интерфейс командной строки WinApp.

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

Выполните следующую команду в командной строке PowerShell с повышенными привилегиями. Значение Subject должно точно соответствовать Publisher в appxmanifest.xml:

New-SelfSignedCertificate -Type Custom -KeyUsage DigitalSignature `
  -Subject "CN=MyPublisher" `
  -CertStoreLocation "Cert:\CurrentUser\My" `
  -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.3", "2.5.29.19={text}") `
  -FriendlyName "MyApp Dev Cert"

Обратите внимание на отпечаток в выходных данных— его потребуется в следующих шагах.

Шаг 2. Экспорт сертификата в PFX-файл

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

Шаг 3. Доверие к сертификату локально

Import-PfxCertificate -CertStoreLocation "Cert:\LocalMachine\TrustedPeople" `
  -FilePath .\devcert.pfx -Password $password

Шаг 4. Подписыв пакет

SignTool sign /fd SHA256 /a /f .\devcert.pfx /p "YourPassword" MyApp.msix

Полное использование SignTool см. в Подписании пакета приложения с использованием SignTool.


Тестирование: Распространение для тестировщиков с использованием самоподписанного сертификата

Чтобы установить самоподписанный пакет MSIX на компьютер тестировщика, для начала необходимо установить доверие к сертификату на этом компьютере.

Замечание

В Windows 10 версии 2004 и более поздних версиях и Windows 11 установка приложений из внешних источников включена по умолчанию. В более ранних версиях Windows 10 тестировщики должны включить использование устанавливаемых приложений в Параметры > Обновление и безопасность > Для разработчиков.

Предоставьте тестировщикам сертификат: Поделитесь файлом .pfx (только открытый ключ .cer) или файлом вместе с пакетом .msix.

Тестировщики выполняют следующие действия в командной строке PowerShell с повышенными привилегиями:

# If you shared a .pfx file (testers need the password)
Import-PfxCertificate -CertStoreLocation "Cert:\LocalMachine\TrustedPeople" `
  -FilePath .\devcert.pfx -Password (ConvertTo-SecureString "YourPassword" -Force -AsPlainText)

# If you shared a .cer file (public key only, no password needed)
Import-Certificate -CertStoreLocation "Cert:\LocalMachine\TrustedPeople" -FilePath .\devcert.cer

После того как сертификат будет подтвержден, тестировщики могут установить .msix, дважды щелкнув по нему.

Это важно

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


Производство: Подпись артефактов Azure (ранее называлось Доверенная подпись)

Применимо к: Windows 10 версии 1809 и более поздних версий, Windows 11 (все версии), Windows Server 2016 и более поздних версий

Подписывание артефактов Azure — это новое имя для того, что ранее называлось надежной подписью. Служба идентична — изменено только имя. В некоторых инструментах (таких как azure/trusted-signing-action GitHub Action и winget идентификатор пакета) по-прежнему может отображаться "Доверенная подпись", так как эти ссылки обновляются со временем.

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

Это важно

Доступность подписывания артефактов в Azure: организации в США, Канаде, Европейском Союзе и Соединенном Королевстве могут подключиться. Отдельные разработчики в настоящее время ограничены США и Канадой. Если вы являетесь отдельным разработчиком за пределами этих регионов, используйте сертификат подписи кода OV от CA вместо этого (см. ниже сертификат подписи кода OV).

Замечание

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

Необходимые условия

  • Учетная запись для подписывания артефактов с завершенной проверкой удостоверения и созданным профилем сертификата. Краткое руководство по подписи артефактов.
  • Роль подписанта профиля доверенного сертификата, назначенная удостоверению, используемому для подписания.

Шаг 1. Установка клиентских инструментов подписывания артефактов

Клиентские инструменты подписывания артефактов включают необходимый подключаемый модуль dlib, совместимую версию программы SignTool и среду выполнения .NET 8. Синтаксис Standard SignTool не работает с подписыванием артефактов без этого пакета.

winget install -e --id Microsoft.Azure.ArtifactSigningClientTools

Если WinGet недоступен (например, в агенте сборки Windows Server), установите с помощью PowerShell от имени администратора:

$ProgressPreference = 'SilentlyContinue'
Invoke-WebRequest -Uri "https://download.microsoft.com/download/70ad2c3b-761f-4aa9-a9de-e7405aa2b4c1/ArtifactSigningClientTools.msi" -OutFile .\ArtifactSigningClientTools.msi
Start-Process msiexec.exe -Wait -ArgumentList '/I ArtifactSigningClientTools.msi /quiet'
Remove-Item .\ArtifactSigningClientTools.msi

Шаг 2. Создание JSON-файла метаданных

Создайте файл metadata.json с деталями учетной записи для подписывания артефактов. URI конечной точки должен соответствовать региону Azure, в которой вы создали учетную запись (вы можете найти его на портале Azure в учетной записи подписи артефактов как Account URI):

{
  "Endpoint": "https://<region>.codesigning.azure.net/",
  "CodeSigningAccountName": "<your-account-name>",
  "CertificateProfileName": "<your-certificate-profile-name>"
}

Для полного списка URI конечных точек, специфичных для региона, см. раздел "Подписание интеграций".

Шаг 3. Проверка подлинности

Задайте учетные данные Azure в качестве переменных среды (используйте учетные данные регистрации приложений для CI/CD):

$env:AZURE_CLIENT_ID     = "<your-client-id>"
$env:AZURE_TENANT_ID     = "<your-tenant-id>"
$env:AZURE_CLIENT_SECRET = "<your-client-secret>"

Для интерактивного локального подписания используйте az login.

Шаг 4: Подпишите пакет

Используйте инструмент SignTool, установленный вместе с клиентскими инструментами для подписывания артефактов. Флаг /dlib указывает на плагин dlib, установленный на предыдущем шаге.

signtool sign /v /fd SHA256 `
  /tr "https://timestamp.acs.microsoft.com" /td SHA256 `
  /dlib "C:\Program Files (x86)\Microsoft\ArtifactSigningClientTools\bin\Azure.CodeSigning.Dlib.dll" `
  /dmdf .\metadata.json `
  MyApp.msix

Подсказка

Используйте флаг /debug, чтобы получить подробный вывод, если подпись завершится сбоем — в нем отображаются сведения о цепочке сертификатов и проверке подлинности.

CI/CD: GitHub Actions

Используйте официальный azure/trusted-signing-action:

- name: Sign MSIX with Azure Artifact Signing
  uses: azure/trusted-signing-action@v0
  with:
    azure-tenant-id: ${{ secrets.AZURE_TENANT_ID }}
    azure-client-id: ${{ secrets.AZURE_CLIENT_ID }}
    azure-client-secret: ${{ secrets.AZURE_CLIENT_SECRET }}
    endpoint: ${{ secrets.AZURE_TRUSTED_SIGNING_ENDPOINT }}
    trusted-signing-account-name: ${{ secrets.AZURE_CODE_SIGNING_NAME }}
    certificate-profile-name: ${{ secrets.AZURE_CERT_PROFILE_NAME }}
    files-folder: ${{ github.workspace }}\output
    files-folder-filter: msix

Сведения о Azure DevOps см. в разделе Настройка Azure DevOps с доверенным подписыванием.


Распределение через Microsoft Store

Применимо к: Все поддерживаемые версии Windows

Если вы распространяете по Microsoft Store, вам не нужно подписывать пакет самостоятельно, магазин подписывает его во время процесса отправки. Создайте пакет и отправьте его через Центр партнеров. Магазин предоставляет глобальную надежную подпись и обрабатывает все управление сертификатами.


Производственный: сертификат подписи кода OV

Применимо к: Windows 10 и более поздним версиям

Если подпись артефактов недоступна для вашего региона или ситуации, вы можете приобрести сертификат подписи кода OV (Organization Validation) из центра сертификации (ЦС), например DigiCert, Sectigo или GlobalSign. Затраты обычно варьируются от $300–500/год.

После получения PFX-файла из центра сертификации:

SignTool sign /fd SHA256 /a /f .\cert.pfx /p "YourPassword" `
  /tr http://timestamp.digicert.com /td SHA256 `
  MyApp.msix

Полные параметры подписи см. в разделе "Подписывание пакета приложения с помощью SignTool".

Замечание

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