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

重要

商務用 Microsoft Store 和教育用 Microsoft Store 將在2023的第一季淘汰。 您可以繼續使用免費應用程式的目前功能,直到該時間為止。 如需此變更的詳細資訊,請參閱演進商務用 Microsoft Store 和教育

重要

Device Guard 簽署服務 v2 (DGSS v2) 現已可供使用。

5月 2021-裝置防護簽署服務 v1 的現有 web 機制將于2021年6月9日淘汰。 請 (DGSS v2) 轉換至以 PowerShell 為基礎的服務版本。 有包含必要 DGSS v2 元件和遷移檔的NuGet 套件可供使用。 請閱讀 NuGet 套件中包含的 Microsoft 使用條款; 請注意,DGSS 的使用意指接受這些條款。 如有任何問題,請洽詢我們 DGSSMigration@microsoft.com 。

注意

下載 dgss 之後,您可以重新命名為 .zip,並將檔案的內容和其他檔和資訊解壓縮

Device Guard 簽署是商務用 Microsoft Store 和教育版中提供的裝置防護功能。 它可讓企業保證每個應用程式都來自受信任的來源。 您可以在 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 入口網站中註冊您的應用程式,讓您可以使用 Azure AD 驗證商務用 Microsoft Store。
  4. 取得 JSON 格式的 Azure AD 存取權杖。
  5. 執行 SignTool 以使用 Device Guard 簽署簽署您的 MSIX 套件,並傳遞您在上一個步驟中取得的 Azure AD 存取權杖。

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

設定 Device Guard 簽署的許可權

若要在商務用 Microsoft Store 或教育用 Microsoft Store 中使用 Device Guard 簽署,您需要Device Guard 簽署者角色。 這是具有簽署能力的最低許可權角色。 其他角色(例如 全域管理員計費帳戶擁有 者)也可以簽署。

注意

當您簽署為應用程式時,會使用 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 租使用者的組織,但只需要單一信任點即可進行程式碼簽署。 所有具有 Microsoft 公司或學校帳戶的使用者,都可以使用您的應用程式或 API。 這包括使用 Office 365 的學校及公司。
    • 任何組織目錄中的帳戶 (任何 Azure AD 目錄-多租使用者) 和個人 Microsoft 帳戶 (例如 Skype、Xbox) –不建議使用此選項,因為它是開放供取用者層級 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. 在 [Advanced settings] 區段中,找出標示為 [ 允許公用用戶端流程 ] 的專案。 將此值設定為 [是]

  11. 按一下頁面頂端的 [ 儲存 ]

  12. 從左側功能表中選取 [ API 許可權]

  13. 從功能表列選取 [新增許可權]。在飛出功能表中,選取 [我的組織使用的 api] 索引標籤。在搜尋方塊中,輸入商務用 Windows 商店

注意

如果商務用 Windows Store 未顯示在清單中,請開啟新的瀏覽器索引標籤,然後流覽至以 https://businessstore.microsoft.com 租使用者全域管理員身分登入。 關閉 [瀏覽器] 索引標籤,然後再次搜尋。

  1. 選取 [商務用 Windows 儲存區],然後選取 [委派的許可權]。檢查user_impersonation
  2. 按一下頁面底部的 [ 新增許可權 ]。 從左側功能表中,選取 [總覽 ] 以返回 DGSSv2 應用程式註冊總覽。

取得 Azure AD 存取權杖

接下來,為您的 Azure AD 應用程式取得 JSON 格式的 Azure AD 存取權杖。 您可以使用各種程式設計和指令碼語言來執行此作業。 如需此程式的詳細資訊,請參閱使用 OAuth 2.0 程式碼授與流程授權存取 Azure Active Directory 的 web 應用程式。 我們建議您連同存取權杖一起抓取重新整理 權杖 ,因為您的存取權杖將會在一小時內到期。

注意

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

取得 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 產生的憑證有效期限為一天。 我們建議您在簽署封裝時,使用其中一個時間戳記選項。 如果您未套用 時間戳記,簽署將會在一天內到期,而應用程式將需要重新簽署。
  • 請確定套件資訊清單中的發行者名稱與您用來簽署套件的憑證相符。 使用這項功能時,它將會是您的分葉憑證。 例如,如果分葉憑證是「 公司名稱」,則資訊清單中的發行者名稱必須是 CN = 「公司名稱」。 否則,簽署作業將會失敗。
  • 僅支援 SHA256 演算法。
  • 當您使用 Device Guard 簽署簽署套件時,您的套件不會透過網際網路傳送。

測試

若要進行測試,請按一下這裡或下載NuGet 套件,並使用下列命令來取得它,以下載根憑證:

Get-RootCertificate

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

重要

為了達成隔離,請部署 WDAC CI 原則,以信任使用 DGSSv2 簽署的應用程式。 請務必仔細閱讀 readme_Cmdlets 檔,並從 DGSSv1 遷移至 NuGet 套件所包含的 DGSSv2 檔。

常見錯誤

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

  • 0x800700d:這個常見的錯誤表示 Azure AD JSON 檔案的格式無效。
  • 您可能必須先接受商務用 Microsoft Store 的條款及條件,才能下載 Device Guard 簽署的根憑證。 這可以藉由在入口網站中取得免費的應用程式來完成。