アプリ パッケージ署名エラーのトラブルシューティング方法
アプリのデプロイ エラーは、アプリ パッケージのデジタル署名の検証に失敗した場合に発生する可能性があります。 これらのエラーを認識する方法と、それらのエラーに対する処理について説明します。
パッケージ化された Windows アプリをデプロイすると、Windows は常にアプリ パッケージのデジタル署名の検証を試みます。 パッケージの署名検証ブロックのデプロイ中のエラー発生。 しかし、パッケージが検証されなかった理由は明確でない可能性があります。 特に、ローカル テスト用のプライベート証明書を使用してパッケージに署名する場合は、多くの場合、それらの証明書の信頼も管理する必要があります。 証明書の信頼構成が正しくないと、署名の検証エラーが発生する可能性があります。
知っておくべきこと
テクノロジ
前提条件
- インストール エラーを診断するための Windows イベント ログ 。
- トラブルシューティング中に証明書ストアを操作するための証明書管理用 Certutil タスク
手順
手順 1: 診断情報のイベント ログを調べる
アプリのデプロイ方法によっては、デプロイ エラーに対して意味のあるエラー コードを受け取っていない可能性があります。 この場合、通常はイベント ログから直接エラー コードを取得できます。
イベント ログからエラー コードを取得するには
eventvwr.msc を実行します。
[イベント ビューアー (ローカル)> アプリケーションとサービス ログ] >[Microsoft]> [Windows] に移動します。
最初に確認するログは、AppxPackagingOM>Microsoft-Windows-AppxPackaging/Operational です。
デプロイ関連のエラーは、AppXDeployment-Server>Microsoft-Windows-AppXDeploymentServer/Operational に記録されます。
デプロイ エラーについては、最新のエラー イベント 404 を検索します。 このエラー イベントには、エラー コードと、デプロイが失敗した理由の説明が表示されます。 エラー イベント 465 が 404 イベントの前に発生した場合、パッケージを開くときに問題が発生したということです。
465 エラーが発生しなかった場合は、一般的なWindows アプリのパッケージ化、デプロイ、クエリのトラブルシューティングを参照してください。 それ以外の場合は、エラー イベント 465 のエラー文字列に表示される一般的なエラー コードについては、次の表を参照してください。
エラー コード | エラー | 説明 | サジェスチョン |
---|---|---|---|
0x80073CF0 | ERROR_INSTALL_OPEN_PACKAGE_FAILED | アプリを開くことができませんでした。 | このエラーは通常、パッケージに問題があることを示します。 パッケージをもう一度構築して署名する必要があります。 詳細については、「アプリ パッケージャーの使用」を参照してください。 |
0x80080205 | APPX_E_INVALID_BLOCKMAP | アプリ パッケージが改ざんされているか、無効なブロック マップがあります。 | パッケージが破損しています。 パッケージをもう一度構築して署名する必要があります。 詳細については、「アプリ パッケージャーの使用」を参照してください。 |
0x800B0004 | TRUST_E_SUBJECT_NOT_TRUSTED | アプリ パッケージが改ざんされました。 | パッケージの内容がデジタル署名と一致しなくなりました。 パッケージにもう一度署名する必要があります。 詳細については、「SignTool を使用してアプリ パッケージに署名する方法」を参照してください。 |
0x800B0100 | TRUST_E_NOSIGNATURE | アプリ パッケージが署名されていません。 | 署名された Windows アプリ パッケージのみをデプロイできます。 アプリ パッケージへの署名についての詳細は、「SignToolを使ってアプリ パッケージに署名する方法」をご覧ください。 |
0x800B0109 | CERT_E_UNTRUSTED_ROOT | アプリ パッケージの署名に使用された証明書チェーンは、信頼されていないルート証明書で終了します。 | 手順 2 に進み、証明書の信頼のトラブルシューティングを行います。 |
0x800B010A | CERT_E_CHAINING | アプリ パッケージの署名に使用された証明書から信頼されたルート機関に証明書チェーンを構築することはできません。 | 手順 2 に進み、証明書の信頼のトラブルシューティングを行います。 |
手順 2: アプリ パッケージの署名に使用する証明書チェーンを決定する
ローカル コンピューターに信頼が必要な証明書を調べるには、アプリ パッケージのデジタル署名の証明書チェーンを調べることができます。
証明書チェーンを特定するには
- ファイル エクスプローラーで、アプリ パッケージを右クリックし、 [プロパティ] を選択します。
- [プロパティ] ダイアログで、[デジタル署名] タブを選択します。このタブには、署名を検証できるかどうかも表示されます。
- [署名] ボックスの一覧で署名を選択し、[詳細] ボタンをクリックします。
- [デジタル署名の詳細] ダイアログで、[証明書の表示] ボタンをクリックします。
- [証明書]のダイアログ ボックスで、[証明のパス] タブをクリックします。
チェーンの最上位の証明書はルート証明書で、下部の証明書は署名証明書です。 チェーン内に証明書が 1 つだけ存在する場合、署名証明書も独自のルート証明書になります。 Certutil で使用する各証明書のシリアル番号を確認できます。
各証明書のシリアル番号を確認するには
- [認定パス] ウィンドウで、証明書を選択し、[証明書の表示] をクリックします。
- [証明書] ダイアログで、[詳細] タブを選択します。このタブには、証明書のシリアル番号やその他の便利なプロパティが表示されます。
手順 3: ローカル コンピューターによって信頼されている証明書を確認する
アプリ パッケージをデプロイできるようにするには、ユーザーのコンテキストだけでなく、ローカル コンピューターコンテキストでも信頼されている必要があります。 その結果、デジタル署名は、前の手順の [デジタル署名] タブで表示すると有効に表示されますが、アプリ パッケージのデプロイ中は検証に失敗します。
アプリ パッケージの署名に使用される証明書チェーンがローカル コンピューターによって特に信頼されているかどうかを確認するには
このコマンドを実行します。
CertUtil.exe -store Root rootCertSerialNumber
このコマンドを実行します。
CertUtil.exe -store TrustedPeople signingCertSerialNumber
証明書のシリアル番号を指定しない場合、Certutil には、そのストアのローカル コンピューターによって信頼されているすべての証明書が一覧表示されます。
署名証明書が自己署名されておらず、ルート証明書がローカル コンピューターのルート ストアにある場合でも、証明書チェーン エラーが原因でパッケージのインストールが失敗する可能性があります。 この場合、中間証明機関の信頼に問題がある可能性があります。 この問題の詳細については、「証明書の使用」を参照してください。
解説
署名証明書が信頼されていないためにパッケージをデプロイできないと判断した場合は、パッケージの発行元がわかっていて信頼できる場合を除き、パッケージをインストールしないでください。
アプリを手動で信頼してインストールする場合 (たとえば、独自のテスト署名済みアプリ パッケージをインストールする場合)、アプリ パッケージからローカル コンピューター証明書信頼に証明書を手動で追加できます。
ローカル コンピューターの証明書信頼に証明書を手動で追加するには
- ファイル エクスプローラーで、アプリ パッケージを右クリックし、ポップアップ コンテキスト メニューで [プロパティ] を選択します。
- [プロパティ] ダイアログで、[デジタル署名] タブを選択します。
- [署名] ボックスの一覧で署名を選択し、[詳細] ボタンをクリックします。
- [デジタル署名の詳細] ダイアログで、[証明書の表示] ボタンをクリックします。
- [証明書] ダイアログで、 [証明書のインストール...] ボタンをクリックします。
- 証明書のインポート ウィザードで [ローカル コンピューター]を選び、 [次へ]をクリックします。 続行するには、管理者特権を付与する必要があります。
- [すべての証明書を次のストア に配置する] を選択し、[信頼されたユーザー] ストアを参照します。
- [次へ] をクリックして、[完了] をクリックしてウィザードを完了します。
この手動による追加後、[証明書] ダイアログで証明書が信頼されていることがわかります。
証明書は、不要になった後で削除できます。
証明書を削除するには
管理者として Cmd.exe を実行します。
管理者コマンド プロンプトで、次のコマンドを実行します。
Certutil -store TrustedPeople
インストールした証明書のシリアル番号を探します。 この番号は certID です。
このコマンドを実行します。
Certutil -delStore TrustedPeople certID
ルート証明書をローカル マシン 信頼されたルート証明機関の証明書ストアに手動で追加することは避けることをお勧めします。 基幹業務アプリケーションなど、同じルート証明書にチェーンする証明書で署名された複数のアプリケーションを用意する方が、信頼できるユーザーストアに個々の証明書をインストールするよりも効率的です。 信頼されたユーザー ストアには、既定で信頼されていると見なされる証明書が含まれているため、上位機関や証明書信頼リストまたはチェーンでは検証されません。 信頼されたルート証明機関の証明書ストアへの証明書の追加に関する考慮事項については、「コード署名のベスト プラクティス」を参照してください。
セキュリティに関する考慮事項
ローカル コンピューター証明書ストアに証明書を追加すると、コンピューター上のすべてのユーザーにおける証明書の信頼に影響します。 アプリ パッケージをテストするために必要なコード署名証明書を信頼されたユーザー証明書ストアにインストールすることをお勧めします。 これらの証明書は、不要になったらすぐに削除し、システムの信頼を損なうことにならないようにします。 アプリ パッケージに署名するための独自のテスト証明書を作成する場合は、テスト証明書に関連付けられている特権を制限することもお勧めします。 アプリ パッケージに署名するためのテスト証明書の作成の詳細については、「アプリ パッケージ署名証明書を作成する方法」を参照してください。
関連トピック