使用 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) 。 NuGet套件,其中包含所需的 DGSS v2 元件和移轉檔。 請閱讀NuGet套件中包含的 Microsoft 使用規定;請注意,DGSS 的使用方式表示接受這些條款。 如有任何問題,請透過 與我們 DGSSMigration@microsoft.com 連絡。

注意

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

Device Guard 簽署是可在 商務用 Microsoft Store 和教育版中使用的 Device Guard 功能。 它可讓企業保證每個應用程式都來自信任的來源。 您可以在 Windows SDK 和 NuGet 套件中的 DGSSv2 dlib 中使用 SignTool,使用 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 簽署的許可權

若要使用 Device Guard 登入商務用 Microsoft Store或教育用 Microsoft Store,您需要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. 在 [進階設定] 區段中找出標示為 [允許公用用戶端流程 ] 的專案。 將此值設定為 [是]

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

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

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

注意

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

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

取得 Azure AD 存取權杖

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

注意

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

測試

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

Get-RootCertificate

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

重要

若要達到隔離,請部署 WDAC CI 原則,以信任使用 DGSSv2 簽署的應用程式。 請務必閱讀readme_Cmdlets檔,並從 DGSSv1 移轉至 NuGet 套件中包含的 DGSSv2 檔。

常見錯誤

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

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