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

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

前提条件

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

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

自己署名証明書を作成する

自己署名証明書は、ストアに発行する準備ができている前に、アプリのテストに役立ちます。 このセクションに記載されている手順に従って、自己署名証明書を作成します。

注意

自己署名証明書を作成して使用すると、証明書をインストールして信頼するユーザーのみがアプリケーションを実行できます。 これはテスト用に実装するのは簡単ですが、追加のユーザーがアプリケーションをインストールできない可能性があります。 アプリケーションを発行する準備ができたら、信頼できる発行元によって発行された証明書を使用することをお勧めします。 このように一元化された信頼のシステムは、アプリケーションエコシステムが悪意のあるアクターからユーザーを保護するための検証レベルを持つことを保証するのに役立ちます。

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

証明書を使ってアプリ パッケージに署名するには、証明書の「サブジェクト」がアプリのマニフェストの [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) であるかどうかを示します。 自己署名証明書の場合、このパラメーターには拡張文字列 "2.5.29.19 = {text}" を含める必要があります。これは、証明書が CA ではなく end エンティティであることを示します。

このコマンドを実行すると、"-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 を使ったアプリ パッケージの署名」をご覧ください。

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

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