パーッケージの署名用の証明書を作成する

この記事は、PowerShell ツールを使用してアプリ パッケージ署名用の証明書を作成してエクスポートする方法について説明します。 UWP アプリのパッケージ化デスクトップ アプリケーションのパッケージ化には Visual Studio の使用をお勧めしますが、アプリの開発に Visual Studio を使用していない場合でも、手動でアプリをパッケージ化することができます。

前提条件

  • パッケージ化されたまたはパッケージ化されていないアプリ
    AppxManifest.xml ファイルを含むアプリ。 最終アプリ パッケージの署名に使用される証明書を作成中に、マニフェスト ファイルを参照する必要があります。 アプリを手動でパッケージ化する方法の詳細については、「MakeAppx.exe ツールを使用してアプリ パッケージの作成する」を参照してください。

  • 公開キー基盤(PKI)コマンドレット
    署名証明書を作成してエクスポートするには、PKI コマンドレットが必要です。 詳細については、「公開キー基盤コマンドレット」を参照してください。

自己署名証明書の作成

自己署名証明書は、ストアに公開する準備が整う前に、アプリをテストするために便利です。 自己署名証明書を作成するには、このセクションで説明する手順に従います。

Note

自己署名証明書を作成して使用する場合、その証明書をインストールし、信頼しているユーザーしかアプリケーションは実行できません。 テスト用途で手軽に導入できますが、他のユーザーがアプリケーションをインストールすることはできない場合があります。 アプリケーションを公開する準備が整ったら、信頼された発行元によって発行された証明書を使用することをお勧めします。 この一元化された信頼システムによって、悪意のあるアクターからユーザーを保護できるだけの検証の水準がアプリケーションのエコシステムに確保されます。

パッケージ アプリのサブジェクトの決定

証明書を使用してアプリ パッケージに署名するには、証明書 の「サブジェクト」がアプリ マニフェストの「発行元」セクションと一致する必要があります。

たとえば、アプリの AppxManifest.xml ファイルの「ID」セクションは次のようになります。

  <Identity Name="Contoso.AssetTracker" 
    Version="1.0.0.0" 
    Publisher="CN=Contoso Software, O=Contoso Corporation, C=US"/>

この場合、「発行元」は「CN=Contoso Software、O=Contoso Corporation、C=US」であり、証明書の作成に使用する必要があります。

New-SelfSignedCertificate」を使用して証明書を作成します。

New-SelfSignedCertificate」PowerShell コマンドレットを使用して自己署名証明書を作成します。 「New-SelfSignedCertificate」はカスタマイズ用にいくつかのパラメーターがありますが、この記事では、「SignTool」で動作する単純な証明書を作成することに焦点を当てます。 このコマンドレットのその他の例と使用用途については、「New-SelfSignedCertificate」を参照してください。

前の例の「AppxManifest.xml」ファイルに基づいて、次の構文を使用して証明書を作成する必要があります。 管理者特権の PowerShell プロンプトで次の操作を行います。

New-SelfSignedCertificate -Type Custom -Subject "CN=Contoso Software, O=Contoso Corporation, C=US" -KeyUsage DigitalSignature -FriendlyName "Your friendly name goes here" -CertStoreLocation "Cert:\CurrentUser\My" -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.3", "2.5.29.19={text}")

以下、いくつかのパラメーターについて注意すべき情報を示します。

  • KeyUsage: 証明書の用途を定義するパラメーターです。 自己署名証明書の場合、このパラメーターは DigitalSignature に設定する必要があります。

  • TextExtension: このパラメーターには、次の拡張機能の設定が含まれます。

    • 拡張キー使用法 (EKU): 証明書の公開キーの用途に関して、追加の目的を示す拡張情報です。 自己署名証明書の場合、このパラメーターは、証明書がコード署名に使用されることを表す拡張文字列 "2.5.29.37={text}1.3.6.1.5.5.7.3.3" を含んでいる必要があります。

    • 基本制限: この拡張情報は、証明機関 (CA) の証明書であるかどうかを表します。 自己署名証明書の場合、このパラメーターは、証明書がエンド エンティティ (つまり CA ではない) ことを表す拡張文字列 "2.5.29.19={text}" を含んでいる必要があります。

このコマンドを実行したら、「-CertStoreLocation」パラメーターで指定されているように、証明書がローカルの証明書ストアに追加されます。 また、証明書のサムプリントも生成されます。

次のコマンドを使用して、証明書を PowerShell ウィンドウで確認できます。

Set-Location Cert:\CurrentUser\My
Get-ChildItem | Format-Table Subject, FriendlyName, Thumbprint

これにより、ローカル ストア内のすべての証明書が表示されます。

証明書のエクスポート

ローカル ストアの証明書を Personal Information Exchange (PFX) ファイルにエクスポートするには、「Export-PfxCertificate」コマンドレットを使用します。

Export-PfxCertificate」を使用するとき、パスワードを作成して使用するか、「-ProtectTo」パラメーターを使用してパスワードなしでファイルにアクセスできるユーザーまたはグループを指定する必要があります。 「-Password」または「-ProtectTo」パラメーターのいずれかを使用しない場合、エラーが表示されることに注意してください。

パスワードの使用

$password = ConvertTo-SecureString -String <Your Password> -Force -AsPlainText 
Export-PfxCertificate -cert "Cert:\CurrentUser\My\<Certificate Thumbprint>" -FilePath <FilePath>.pfx -Password $password

ProtectTo の使用

Export-PfxCertificate -cert Cert:\CurrentUser\My\<Certificate Thumbprint> -FilePath <FilePath>.pfx -ProtectTo <Username or group name>

証明書を作成してエクスポートしたら、「SignTool」でアプリ パッケージに署名する準備ができます。 手動パッケージ化プロセスの次の手順については、「SignTool を使用してアプリ パッケージに署名」を参照してください。

セキュリティに関する考慮事項

ローカル コンピューター証明書ストアに証明書を追加すると、コンピューター上のすべてのユーザーにおける証明書の信頼に影響します。 これらの証明書は、使用されてシステムの信頼を侵害されるのを防ぐため、不要になったら削除することを推奨します。