使用 Device Guard 簽署來簽署 MSIX 套件

重要

商務用 Microsoft Store 和教育用 Microsoft Store 將於 2023 年第一季淘汰。 在此之前,您可以繼續使用免費應用程式目前的功能。 如需這項變更的詳細資訊,請參閱演進 商務用 Microsoft Store 和教育版

重要

Device Guard 簽署服務 v2 (DGSS v2) 現已推出。

2021 年 5 月 - Device Guard 簽署服務 v1 的現有 Web 型機制將於 2021 年 6 月 9 日淘汰。 請轉換至以 PowerShell 為基礎的服務版本 (DGSS v2)。 提供包含所需 DGSS v2 元件和移轉檔的 NuGet 套件。 請閱讀 NuGet 套件中包含的 Microsoft 使用規定;請注意,使用 DGSS 表示接受這些條款。 如有任何問題,請透過 DGSSMigration@microsoft.com與我們連絡。

注意

下載 microsoft.acs/dgss.client.nupkg 之後,您可以重新命名為 .zip,並擷取檔案的內容和其他文件和資訊

Device Guard 簽署是在 商務用 Microsoft Store 和教育版中提供的 Device Guard 功能。 它可讓企業保證每個應用程式都來自受信任的來源。 您可以使用 Windows SDK 中的 SignTool 和 NuGet 套件中的 DGSSv2 dlib,使用 Device Guard 簽署來簽署 MSIX 應用程式。 這項功能支援可讓您輕鬆地將 Device Guard 登入納入 MSIX 套件建置和簽署工作流程。

Device Guard 簽署需要 商務用 Microsoft Store 中的許可權,並使用 Azure Active Directory (AD) 驗證。 若要使用 Device Guard 簽署簽署 MSIX 套件,請遵循下列步驟。

  1. 如果您尚未這麼做,請註冊 商務用 Microsoft Store 或 教育用 Microsoft Store

    注意

    您只需要使用此入口網站來設定 Device Guard 簽署的許可權。

  2. 在 商務用 Microsoft Store(或或 教育用 Microsoft Store),將執行 Device Guard 簽署所需的許可權指派給自己。
  3. 使用適當的設定在 Azure 入口網站註冊您的應用程式,以便搭配 商務用 Microsoft Store 使用 Azure AD 驗證。
  4. 以 JSON 格式取得 Azure AD 存取令牌。
  5. 執行 SignTool 以使用 Device Guard 簽署來簽署 MSIX 套件,並傳遞您在上一個步驟中取得的 Azure AD 存取令牌。

下列各節將更詳細地說明這些步驟。

設定 Device Guard 簽署的許可權

若要使用 Device Guard 登入 商務用 Microsoft Store 或 教育用 Microsoft Store,您需要 Device Guard 簽署者角色。 這是具備簽署能力的最低許可權角色。 其他角色,例如 Global 管理員 istratorBilling 帳戶擁有者也可以簽署。

注意

當您以應用程式身分簽署時,會使用Device Guard簽署者角色。 當您以登入者身分登入時,會使用全域 管理員 istrator 和計費帳戶擁有者。

若要確認或重新指派角色:

  1. 登入商務用 Microsoft Store
  2. 選取 [ 管理] ,然後選取 [ 許可權]。
  3. 檢視 角色

如需詳細資訊,請參閱 商務用 Microsoft Store 和教育版中的角色和許可權。

在 Azure 入口網站中註冊您的應用程式

若要使用適當的設定註冊您的應用程式,以便搭配使用 Azure AD 驗證搭配 商務用 Microsoft Store:

  1. 流覽至 https://portal.azure.com,並以租使用者全域 管理員 istrator 身分進行驗證

  2. 流覽至 Azure Active Directory Azure 服務。

  3. 從左側功能表的 [管理] 下尋找並選取 [應用程式註冊

  4. 從功能表列選取 [新增註冊]

  5. 在 [ 名稱] 欄位中,輸入 DGSSv2

    注意

    [名稱] 欄位可用來輕鬆識別 Azure 入口網站 中的應用程式註冊。 任何所需的名稱都可以使用。 為了進行此示範,我們只會使用 DGSSv2 輕鬆識別。

  6. 在 [支持的帳戶類型] 下,選取適當的設定。

    • 僅限此組織目錄中的帳戶 (單一租使用者) - 除非您有多租使用者部署的特定需求,否則建議使用此選項。 您目錄中的所有使用者及來賓帳戶都能使用您的應用程式或 API。
    • 任何組織目錄中的帳戶 (任何 Azure AD 目錄 - 多租使用者) – 此選項最適合具有多個 Azure AD 租使用者的組織,但只需要單一信任點進行程式代碼簽署。 具有 Microsoft 公司或學校帳戶的所有使用者都可以使用您的應用程式或 API。 這包括使用 Office 365 的學校和企業。
    • 任何組織目錄中的帳戶 (任何 Azure AD 目錄 - 多租使用者 ) 和個人 Microsoft 帳戶 (例如 Skype、 Xbox) - 不建議使用此選項,因為它可供取用者層級 Microsoft 帳戶使用。 具有公司、學校或個人 Microsoft 帳戶 Microsoft 帳戶的使用者可以使用您的應用程式或 API。 其中包含使用 Office 365 的學校和企業,以及用來登入 Xbox 和 Skype 等服務的個人帳戶。
    • 僅限 個人 Microsoft 帳戶 – 不建議使用此選項的最後一個選項。 這不僅是因為它允許個人帳戶,而且因為此選項只支援個人帳戶。 已明確封鎖 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 存取令牌

接下來,以 JSON 格式取得 Azure AD 應用程式的 Azure AD 存取令牌。 您可以使用各種程式設計語言和文稿語言來執行這項操作。 如需此程式的詳細資訊,請參閱 使用 OAuth 2.0 程式代碼授與流程授權存取 Azure Active Directory Web 應用程式。 建議您擷取重新 整理令牌以及存取令牌 ,因為您的存取令牌將在一小時內到期。

注意

如果商務用 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 檔案以供稍後使用。

取得 Device Guard 簽署第 2 版 DLL

若要使用 Device Guard 簽署第 2 版進行簽署,請下載將用來簽署套件的 NuGet 套件,以取得 Microsoft.Acs.Dlib.dll。 這也需要取得跟證書。

簽署您的套件

取得 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 簽署 v2 所產生的憑證有效期為一天。 建議您在簽署套件時使用其中一個時間戳選項。 如果您未套用 時間戳,簽署將會在一天內到期,而且應用程式必須辭職。
  • 請確定套件指令清單中的發行者名稱符合您用來簽署套件的憑證。 使用這項功能時,將會是您的分葉憑證。 例如,如果分葉憑證是 CompanyName,則指令清單中的發行者名稱必須是 CN=CompanyName。 否則,簽署作業將會失敗。
  • 僅支援SHA256演算法。
  • 當您使用 Device Guard 簽署簽署套件時,您的套件不會透過因特網傳送。

Test

若要測試,請按兩下 這裡 或下載 NuGet 套件 ,並使用 命令取得跟證書:

Get-RootCertificate

將跟證書安裝到裝置上的 受信任跟證書授權單位 。 安裝新簽署的應用程式,以確認您已使用 Device Guard 簽署成功簽署應用程式。

重要

為了達到隔離,請將 WDAC CI 原則部署至信任使用 DGSSv2 簽署的應用程式。 請務必閱讀readme_cmdlets檔和從 DGSSv1 移轉至 NuGet 套件中包含的 DGSSv2 檔。

常見錯誤

以下是您可能會遇到的常見錯誤。

  • 0x800700d:此常見錯誤表示 Azure AD JSON 檔案的格式無效。
  • 下載 Device Guard 簽署跟證書之前,您可能需要接受 商務用 Microsoft Store 條款及條件。 這可以透過在入口網站中取得免費應用程式來完成。