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

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

前提条件

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

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

自己署名証明書の作成

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

Note

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

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

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

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

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

この例では [Publisher] は "CN=Contoso Software, O=Contoso Corporation, C=US" で、これを証明書の作成に使用する必要があります。

New-SelfSignedCertificate を使って証明書を作成する

PowerShell コマンドレット New-SelfSignedCertificate を使用して自己署名証明書を作成します。 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 を使用

$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 を使ったアプリ パッケージの署名」をご覧ください。

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

ローカル コンピューターの証明書ストアに証明書を追加することによって、コンピューター上のすべてのユーザーの証明書の信頼に影響します。 システムの信頼性を損なうのを防ぐために、これらの証明書が不要になったときには、削除することをお勧めします。