Подписывание пакета MSIX с помощью подписи Device Guard

Важно.

Поддержка Microsoft Store для бизнеса и Microsoft Store для образования будут прекращена в первом квартале 2023 г. Вы можете продолжать использовать текущие возможности бесплатных приложений до этого момента. Дополнительные сведения об этом изменении см. в статье "Развитие Microsoft Store для бизнеса и образования"

Важно!

Теперь доступна служба подписывания Device Guard версии 2 (DGSS версии 2).

Май 2021 г. — существующий веб-механизм для службы подписи Device Guard версии 1 будет прекращен 9 июня 2021 г. Перейдите в версию службы на основе PowerShell (DGSS версии 2). Доступен пакет NuGet, содержащий необходимые компоненты DGSS версии 2 и документацию по миграции. Ознакомьтесь с условиями использования Майкрософт, включенными в пакет NuGet; обратите внимание, что использование DGSS подразумевает принятие этих условий. Для любых вопросов обратитесь к нам по адресу DGSSMigration@microsoft.com.

Примечание.

После скачивания microsoft.acs/dgss.client.nupkg можно переименовать в ZIP-файл и извлечь содержимое для файлов и дополнительной документации и информации

Подпись Device Guard — это функция Device Guard, доступная в Microsoft Store для бизнеса и образовательных учреждениях. Это позволяет предприятиям гарантировать, что каждое приложение поступает из надежного источника. Вы можете использовать SignTool в пакете NuGet с пакетом Sdk для Windows и DGSSv2 dlib для подписывания приложений MSIX с помощью подписи Device Guard. Эта функция позволяет легко включить вход Device Guard в рабочий процесс сборки и подписывания пакетов MSIX.

Для подписывания Device Guard требуются разрешения в Microsoft Store для бизнеса и проверка подлинности Azure Active Directory (AD). Чтобы подписать пакет MSIX с помощью подписи Device Guard, выполните следующие действия.

  1. Если вы еще этого не сделали, зарегистрируйтесь на Microsoft Store для бизнеса или Microsoft Store для образования.

    Примечание.

    Эту страницу необходимо использовать только для настройки разрешений для подписи Device Guard.

  2. В Microsoft Store для бизнеса (или Microsoft Store для образования) назначьте себе роль с разрешениями, необходимыми для подписи Device Guard.
  3. Зарегистрируйте приложение в портал Azure с соответствующими параметрами, чтобы использовать проверку подлинности Azure AD с Microsoft Store для бизнеса.
  4. Получение маркера доступа Azure AD в формате JSON.
  5. Запустите SignTool, чтобы подписать пакет MSIX с помощью подписи Device Guard и передать маркер доступа Azure AD, полученный на предыдущем шаге.

В следующих разделах подробно описаны эти действия.

Настройка разрешений для подписи Device Guard

Чтобы использовать вход Device Guard в Microsoft Store для бизнеса или Microsoft Store для образования, требуется роль подписи Device Guard. Это наименее привилегированная роль, которая имеет возможность подписывать. Другие роли, такие как Global Администратор istrator и владелец учетной записи выставления счетов, также могут подписаться.

Примечание.

Роль signer Device Guard используется при подписи в качестве приложения. Глобальный Администратор istrator и владелец учетной записи выставления счетов используется при входе в систему.

Чтобы подтвердить или переназначить роли, выполните приведенные ниже действия.

  1. Войдите в Microsoft Store для бизнеса.
  2. Выберите "Управление" и выберите "Разрешения".
  3. Просмотр ролей.

Дополнительные сведения см. в разделе "Роли и разрешения" в Microsoft Store для бизнеса и образовании.

Регистрация приложения на портале Azure

Чтобы зарегистрировать приложение с соответствующими параметрами, чтобы использовать проверку подлинности Azure AD с помощью Microsoft Store для бизнеса:

  1. Перейдите к разделу https://portal.azure.comи выполните проверку подлинности в качестве клиента Global Администратор istrator

  2. Перейдите к службе Azure Active Directory .

  3. В меню слева в разделе "Управление" найдите и выберите Регистрация приложений

  4. В строке меню выберите "Создать регистрацию"

  5. В поле "Имя" введите DGSSv2.

    Примечание.

    Поле "Имя" используется для простой идентификации регистрации приложения в портал Azure. Любое нужное имя можно использовать. Для этой демонстрации мы используем DGSSv2, чтобы упростить идентификацию.

  6. В разделе "Поддерживаемые типы учетных записей " выберите соответствующий параметр.

    • Учетные записи в этом каталоге организации (только один клиент) — этот параметр рекомендуется, если вам не требуется многотенантное развертывание. Все учетные записи пользователей и гостевые учетные записи в вашем каталоге могут использовать ваше приложение или API.
    • Учетные записи в любом каталоге организации (любой каталог Azure AD — Мультитенант) — этот вариант лучше всего подходит для организации с несколькими клиентами Azure AD, но для подписывания кода требуется только одна точка доверия. Все пользователи с рабочей или учебной учетной записью корпорации Майкрософт могут использовать приложение или API. Сюда относятся учебные заведения и предприятия, которые используют Office 365.
    • Учетные записи в любом каталоге организации (любой каталог Azure AD — Мультитенант) и личных учетных записей Майкрософт (например, Skype, Xbox) — этот параметр не рекомендуется из-за того, что он открыт для использования учетными записями Майкрософт уровня потребителей. Все пользователи с рабочей, учебной или личной учетной записью Майкрософт могут использовать ваше приложение или API. Он включает школы и предприятия, использующие Office 365, а также личная учетная запись, которые используются для входа в такие службы, как Xbox и Skype.
    • Только личные учетные записи Майкрософт— как и последний вариант, этот параметр также не рекомендуется. Это не только потому, что это позволяет личная учетная запись, но так как этот параметр поддерживает только личная учетная запись. Учетные записи Azure AD явно блокируются. Личные учетные записи, используемые для входа в такие службы, как Xbox и Skype
  7. В раскрывающемся списке URI перенаправления выберите общедоступный клиент или собственный (мобильный и настольный компьютер) в раскрывающемся меню. Введите https://dgss.microsoft.com в текстовое поле.

  8. Щелкните Зарегистрировать.

  9. В правом верхнем углу страницы найдите URI перенаправления с меткой записи. Выберите строку под ней с меткой 0 web, 0 spa, 1 общедоступный клиент

  10. Найдите записи с меткой "Разрешить общедоступные потоки клиентов" в разделе "Дополнительные параметры". Задайте для этого значения значение "Да"

  11. Нажмите кнопку " Сохранить " в верхней части страницы

  12. В меню слева выберите разрешения API

  13. В строке меню выберите "Добавить разрешение". В всплывающем меню выберите API, которые моя организация использует вкладку. В поле поиска введите Магазин Windows для бизнеса

Примечание.

Если Магазин Windows для бизнеса не отображается в списке, откройте новую вкладку браузера и перейдите к https://businessstore.microsoft.com ней в качестве клиента Global Администратор istrator. Закройте вкладку браузера, а затем снова выполните поиск.

  1. Выберите Магазин Windows для бизнеса и выберите делегированные разрешения. Проверьте user_impersonation.
  2. Нажмите кнопку "Добавить разрешения" в нижней части страницы . В меню слева выберите Обзор , чтобы вернуться к обзору регистрации приложений DGSSv2.

Получение маркера доступа Azure AD

Затем получите маркер доступа Azure AD для приложения Azure AD в формате JSON. Это можно сделать с помощью различных языков программирования и сценариев. Дополнительные сведения об этом процессе см. в статье "Авторизация доступа к веб-приложениям Azure Active Directory" с помощью потока предоставления кода OAuth 2.0. Рекомендуется получить маркер обновления вместе с маркером доступа, так как срок действия маркера доступа истекает через час.

Примечание.

Если Магазин Windows для бизнеса не отображается в списке, откройте новую вкладку браузера и перейдите к https://businessstore.microsoft.com ней в качестве клиента Global Администратор istrator. Закройте вкладку браузера, а затем снова выполните поиск.

В следующем примере PowerShell показано, как запросить маркер доступа.

function GetToken()
{

    $c = Get-Credential -Credential $user
    
    $Credentials = New-Object System.Management.Automation.PSCredential -ArgumentList $c.UserName, $c.password
    $user = $Credentials.UserName
    $password = $Credentials.GetNetworkCredential().Password
    
    $tokenCache = "outfile.json"

    #replace <application-id> and <client_secret-id> with the Application ID from your Azure AD application registration
    $Body = @{
      'grant_type' = 'password'
      'client_id'= '<application-id>'
      'client_secret' = '<client_secret>'
      'resource' = 'https://onestore.microsoft.com'
      'username' = $user
      'password' = $password
    }

    $webpage = Invoke-WebRequest 'https://login.microsoftonline.com/common/oauth2/token' -Method 'POST'  -Body $Body -UseBasicParsing
    $webpage.Content | Out-File $tokenCache -Encoding ascii
}

Примечание.

Рекомендуется сохранить JSON-файл для последующего использования.

Получение библиотеки DLL для подписи Device Guard версии 2

Чтобы войти с помощью Device Guard Sign версии 2, получите библиотеку Microsoft.Acs.Dlib.dll, скачав пакет NuGet, который будет использоваться для подписи пакета. Это также необходимо для получения корневого сертификата.

Подписыв пакет

После получения маркера доступа Azure AD вы можете использовать SignTool для подписывания пакета с помощью Device Guard. Дополнительные сведения об использовании SignTool для подписывания пакетов см. в разделе "Подпись пакета приложения" с помощью SignTool.

В следующем примере командной строки показано, как подписать пакет с помощью Device Guard подписи версии 2.

signtool sign /fd sha256 /dlib Microsoft.Acs.Dlib.dll /dmdf <Azure AAD in .json format> /t <timestamp-service-url> <your .msix package>

Примечание.

  • Сертификаты, созданные для подписи Device Guard версии 2, действительны в течение одного дня. Рекомендуется использовать один из вариантов метки времени при подписи пакета. Если метка времени не применяется, срок действия подписи истекает в один день, и приложению потребуется уйти в отставку.
  • Убедитесь, что имя издателя в манифесте пакета соответствует сертификату, который вы используете для подписи пакета. С помощью этой функции это будет ваш конечный сертификат. Например, если конечный сертификат — CompanyName, то имя издателя в манифесте должно быть CN=CompanyName. В противном случае операция подписывания завершится ошибкой.
  • Поддерживается только алгоритм SHA256.
  • Когда вы подписываете пакет с помощью подписи Device Guard, ваш пакет не отправляется через Интернет.

Тест

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

Get-RootCertificate

Установите корневой сертификат в доверенные корневые центры сертификации на устройстве. Установите новое подписанное приложение, чтобы убедиться, что приложение успешно подписано с помощью подписи Device Guard.

Важно!

Чтобы обеспечить изоляцию, разверните политику CI WDAC для доверия приложений, подписанных с помощью DGSSv2. Обязательно прочитайте документацию по readme_cmdlets и миграцию из DGSSv1 в документацию DGSSv2, включенную в пакет NuGet.

Распространенные ошибки

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

  • 0x800700d. Эта распространенная ошибка означает, что недопустимый формат JSON-файла Azure AD.
  • Перед скачиванием корневого сертификата Device Guard для подписывания Device Guard может потребоваться принять условия Microsoft Store для бизнеса. Это можно сделать, получив бесплатное приложение на портале.