Подписывание пакета 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 можно использовать в пакете SDK Windows и DGSSv2 dlib в пакете NuGet для подписывания приложений 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. Это роль с минимальными привилегиями, которая имеет возможность подписывать. Другие роли, такие как глобальный администратор и владелец учетной записи выставления счетов , также могут подписаться.

Примечание

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

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

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

Подробнее: Роли и разрешения в Microsoft Store для бизнеса и образования.

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

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

  1. Перейдите к https://portal.azure.comи выполните проверку подлинности в качестве глобального администратора клиента

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

  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 public client

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

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

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

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

Примечание

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

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

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

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

Примечание

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

В следующем примере 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 версии 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. Эта распространенная ошибка означает, что недопустимый формат Azure AD JSON-файла.
  • Возможно, вам потребуется принять условия Microsoft Store для бизнеса перед скачиванием корневого сертификата подписи Device Guard. Это можно сделать, получив бесплатное приложение на портале.