Device Guard の署名を使用して MSIX パッケージに署名する
重要
ビジネス向け Microsoft Storeと教育機関向け Microsoft Storeは、2023 年第 1 四半期に廃止されました。 この変更の詳細については、「ビジネス向け Microsoft Storeと教育の進化」を参照してください。
その時点まで、現在の Device Guard 署名サービス v2 (DGSS) 機能を引き続き使用できます。 DGSS は Azure Code Signing Service (ACS) に置き換えられ、Windows Defender アプリケーション制御 (WDAC) ポリシーとカタログ ファイル署名のニーズをサポートします。
Device Guard 署名サービス v2 (DGSS) は、既存の ビジネス向け Microsoft Store および Education テナント アカウントに付属するコード署名サービスです。 DGSS を使用して、基幹業務アプリ、カタログ ファイル、および Windows Defender アプリケーション制御 (WDAC) ポリシーに署名できます。 これにより、企業は各アプリが信頼できるソースからのものであることを保証できます。 Windows SDK の SignTool と NuGet パッケージの DGSSv2 dlib を使用して、Device Guard の署名で MSIX アプリに署名できます。 この機能サポートを使用することで、Device Guard の署名を MSIX パッケージの構築と署名のワークフローに簡単に組み込むことができます。
必要な DGSS v2 コンポーネントと移行ドキュメントを含む NuGet パッケージが用意されています。 その NuGet パッケージに含まれている Microsoft 利用規約をお読みください。DGSS の使用は、これらの条項に同意したことを意味します。 ご質問がある場合は、DGSSMigration@microsoft.com までお問い合わせください。
Note
microsoft.acs/dgss.client.nupkg をダウンロードした後、.zip に名前を変更して、ファイルおよび追加のドキュメントと情報の内容を抽出できます
Device Guard の署名には、ビジネス向け Microsoft Store のアクセス許可が必要で、Azure Active Directory (AD) 認証が使用されます。 Device Guard の署名で MSIX パッケージに署名するには、次の手順に従います。
- ビジネス向け Microsoft Store (または教育機関向け Microsoft Store) で、Device Guard 署名を実行するために必要なアクセス許可を持つロールを自分自身に割り当てます。
Note
このポータルは、Device Guard の署名のアクセス許可を構成するためにのみ使用することが必要になります。
- ビジネス向け Microsoft Store で Azure AD 認証を使用できるように、適切な設定を指定して Azure portal にアプリを登録します。
- JSON 形式の Azure AD アクセス トークンを取得します。
- Device Guard の署名で MSIX パッケージに署名するために SignTool を実行し、前の手順で取得した Azure AD アクセス トークンを渡します。
以降のセクションで、これらの手順について詳しく説明します。
Device Guard の署名のアクセス許可を構成する
ビジネス向け Microsoft Store または教育機関向け Microsoft Store で Device Guard の署名を使用するには、Device Guard の署名者ロールが必要になります。 これは、署名する権限を持つ最小特権ロールです。 グローバル管理者や課金アカウント所有者などの他のロールでも署名できます。
Note
Device Guard の署名者ロールは、アプリとして署名するときに使用されます。 グローバル管理者と課金アカウント所有者は、ログインしているユーザーとして署名するときに使用されます。
ロールを確認または再割り当てするには:
- ビジネス向け Microsoft Store にサインインします。
- [管理] を選択してから、[アクセス許可] を選択します。
- [ロール] を表示します。
詳細は、ビジネスおよび教育機関向け Microsoft ストアのロールとアクセス許可を参照してください。
Azure portal でアプリを登録する
ビジネス向け Microsoft Store で Azure AD 認証を使用できるように、適切な設定を指定してアプリを登録します。
https://portal.azure.com に移動して、テナントのグローバル管理者として認証します。
Azure Active Directory Azure サービスに移動します。
[管理] の下の左側のメニューから、[アプリの登録] を見つけて選択します。
メニュー バーから、[新規登録] を選択します。
[名前] フィールドに「DGSSv2」と入力します。
Note
[名前] フィールドは、Azure portal でのアプリの登録を識別しやすくするために使用します。 任意の名前を使用できます。 このデモでは、識別しやすいように DGSSv2 を使用しています。
[サポートされているアカウントの種類] で、適切な設定を選択します。
- この組織ディレクトリ内のアカウントのみ (シングル テナント) – マルチテナント展開の特定の必要性がない限り、このオプションをお勧めします。 ディレクトリ内のすべてのユーザー アカウントとゲスト アカウントが、アプリケーションまたは API を使用できます。
- 任意の組織ディレクトリ内のアカウント (任意の Azure AD ディレクトリ - マルチテナント) – このオプションは、複数の Azure AD テナントを持っているものの、コード署名に必要な信頼ポイントは 1 つのみである組織に最適です。 Microsoft の職場または学校アカウントを持つすべてのユーザーが、このアプリケーションまたは API を使用できます。 これには、Office 365 を使用する学校や企業が含まれます。
- 任意の組織ディレクトリ内のアカウント (任意の Azure AD ディレクトリ - マルチテナント) と個人用 Microsoft アカウント (Skype、Xbox など) – コンシューマー レベルの Microsoft アカウントで使用できるようになっているため、このオプションはお勧めしません。 職場または学校アカウントあるいは個人用 Microsoft アカウントを持つすべてのユーザーが、このアプリケーションまたは API を使用できます。 これには、Office 365 を使用する学校と企業だけでなく、Xbox や Skype などのサービスにサインインするために使用されている個人用アカウントも含まれます。
- 個人用 Microsoft アカウントのみ – 最後のオプションと同様に、このオプションもお勧めしません。 これは、個人用アカウントが許可されるだけでなく、このオプションでは個人アカウントのみがサポートされるためです。 Azure AD アカウントは明示的にブロックされます。 Xbox や Skype などのサービスにサインインするのに使用される個人用アカウント。
[リダイレクト URI] ドロップダウンで、ドロップダウン選択メニューから [パブリック クライアント/ネイティブ (モバイル & デスクトップ)] を選択します。 テキスト ボックスに「
https://dgss.microsoft.com
」と入力します。[登録] をクリックします。
ページの右上にある [リダイレクト URI] というラベルの付いたエントリを探します。 その下にある、0 Web、0 spa、1 パブリック クライアントというラベルが付いた行を選択します。
[詳細設定] セクションで、[パブリック クライアント フローを許可する] というラベルの付いたエントリを見つけます。 この値を [はい] に設定します。
ページの上部にある [保存] をクリックします。
左側のメニューから [API のアクセス許可] を選択します。
メニュー バーから、[アクセス許可の追加] を選択します。ポップアップ メニューで、[組織が使用する API] タブを選択します。検索ボックスに「ビジネス向け Windows ストア」と入力します。
Note
"ビジネス向け Windows ストア" が一覧に表示されない場合は、新しいブラウザー タブを開き、https://businessstore.microsoft.com に移動して、テナントのグローバル管理者としてサインインします。 ブラウザー タブを閉じてから、もう一度検索します。
- [ビジネス向け Windows ストア] を選択し、[委任されたアクセス許可] を選択します。user_impersonation をチェックします。
- ページの下部にある [アクセス許可の追加] をクリックします。 左側のメニューから [概要] を選択して、DGSSv2 アプリ登録の概要に戻ります。
Azure AD アクセス トークンを取得する
次に、JSON 形式で Azure AD アプリの Azure AD アクセス トークンを取得します。 これは、さまざまなプログラミング言語とスクリプト言語を使用して行うことができます。 このプロセスの詳細については、OAuth 2.0 コード付与フローを使用した Azure Active Directory Web アプリケーションへのアクセスの承認に関する記事を参照してください。 アクセス トークンは 1 時間で期限切れになるので、アクセス トークンと一緒に更新トークンを取得することをお勧めします。
Note
"ビジネス向け Windows ストア" が一覧に表示されない場合は、新しいブラウザー タブを開き、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
}
Note
後で使用するために 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>
Note
- Device Guard の署名 v2 用に生成された証明書の有効期限は 1 日です。 パッケージに署名するときは、タイムスタンプ オプションのいずれかを使用することをお勧めします。 タイムスタンプを適用しない場合、署名は 1 日で有効期限が切れ、アプリに再度署名することが必要になります。
- パッケージのマニフェストの発行元の名前が、パッケージの署名に使用している証明書と一致していることを確認します。 この機能を使用すると、リーフ証明書になります。 たとえば、リーフ証明書が CompanyName の場合、マニフェストの発行元の名前は CN=CompanyName である必要があります。 それ以外の場合、署名操作は失敗します。
- SHA256 アルゴリズムのみがサポートされています。
- Device Guard の署名を使用してパッケージに署名する場合、パッケージはインターネット経由で送信されません。
テスト
テストをするには、こちらをクリックするか、NuGet パッケージをダウンロードして次のコマンドで取得することにより、ルート証明書を取得します。
Get-RootCertificate
ルート証明書を、デバイスの [信頼されたルート証明機関] にインストールします。 新しく署名したアプリをインストールして、Device Guard の署名でアプリに正常に署名できていることを確認します。
重要
分離を実現するため、DGSSv2 で署名されたアプリを信頼するように、WDAC CI ポリシーを展開します。 readme_cmdlets のドキュメントと、NuGet パッケージに含まれている DGSSv1 から DGSSv2 への移行のドキュメントを必ず確認してください。
一般的なエラー
発生する可能性のある一般的なエラーを次に示します。
- 0x800700d: この一般的なエラーは、Azure AD JSON ファイルの形式が無効であることを意味します。
- Device Guard の署名のルート証明書をダウンロードする前に、ビジネス向け Microsoft Store の使用条件に同意することが必要になる場合があります。 これは、ポータルで無料のアプリを取得することによって行えます。