パッケージ署名用の証明書を作成するCreate a certificate for package signing

この記事では、PowerShell ツールを使用して、アプリ パッケージ署名用の証明書を作成してエクスポートする方法について説明します。This article explains how to create and export a certificate for app package signing using PowerShell tools. UWP アプリをパッケージ化し、デスクトップアプリをパッケージ化するには、visual studio を使用することをお勧めしますが、アプリの開発に visual studio を使用していない場合は、アプリを手動でパッケージ化することもできます。It's recommended that you use Visual Studio for packaging UWP apps and packaging desktop apps, but you can still package an app manually if you did not use Visual Studio to develop your app.

前提条件Prerequisites

  • パッケージまたはパッケージ化されていないアプリA packaged or unpackaged app
    AppxManifest.xml ファイルを含むアプリ。An app containing an AppxManifest.xml file. マニフェスト ファイルを参照して、最終的なアプリ パッケージの署名に使われる証明書を作成する必要があります。You will need to reference the manifest file while creating the certificate that will be used to sign the final app package. 手動でアプリをパッケージ化する方法について詳しくは、「MakeAppx.exe ツールを使ってアプリ パッケージを作成する」をご覧ください。For details on how to manually package an app, see Create an app package with the MakeAppx.exe tool.

  • 公開キー基盤 (PKI) のコマンドレットPublic Key Infrastructure (PKI) Cmdlets
    署名証明書を作成およびエクスポートするには、PKI コマンドレットが必要です。You need PKI cmdlets to create and export your signing certificate. 詳しくは、「公開キー基盤コマンドレット」をご覧ください。For more information, see Public Key Infrastructure Cmdlets.

自己署名証明書を作成するCreate a self-signed certificate

自己署名証明書は、ストアに発行する準備ができている前に、アプリのテストに役立ちます。A self-signed certificate is useful for testing your app before you're ready to publish it to the Store. このセクションに記載されている手順に従って、自己署名証明書を作成します。Follow the steps outlined in this section to create a self-signed certificate.

注意

自己署名証明書を作成して使用すると、証明書をインストールして信頼するユーザーのみがアプリケーションを実行できます。When you create and use a self-signed certificate only users who install and trust your certificate can run your application. これはテスト用に実装するのは簡単ですが、追加のユーザーがアプリケーションをインストールできない可能性があります。This is easy to implement for testing but it may prevent additional users from installing your application. アプリケーションを発行する準備ができたら、信頼できる発行元によって発行された証明書を使用することをお勧めします。When you are ready to publish your application we recommend that you use a certificate issued by a trusted source. このように一元化された信頼のシステムは、アプリケーションエコシステムが悪意のあるアクターからユーザーを保護するための検証レベルを持つことを保証するのに役立ちます。This system of centralized trust helps to ensure that the application ecosystem has levels of verification to protect users from malicious actors.

パッケージ アプリのサブジェクトを決定するDetermine the subject of your packaged app

証明書を使ってアプリ パッケージに署名するには、証明書の「サブジェクト」がアプリのマニフェストの [Publisher] セクションと一致する必要があります。To use a certificate to sign your app package, the "Subject" in the certificate must match the "Publisher" section in your app's manifest.

たとえば、アプリの AppxManifest.xml ファイルの [Identity] セクションは、次のようになります。For example, the "Identity" section in your app's AppxManifest.xml file should look something like this:

  <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" で、これを証明書の作成に使用する必要があります。The "Publisher", in this case, is "CN=Contoso Software, O=Contoso Corporation, C=US" which needs to be used for creating your certificate.

New-SelfSignedCertificate を使って証明書を作成するUse New-SelfSignedCertificate to create a certificate

PowerShell コマンドレット New-SelfSignedCertificate を使用して自己署名証明書を作成します。Use the New-SelfSignedCertificate PowerShell cmdlet to create a self signed certificate. New-SelfSignedCertificate にはカスタマイズのためのいくつかのパラメーターがありますが、この記事では、SignTool で動作する簡単な証明書の作成を中心に説明します。New-SelfSignedCertificate has several parameters for customization, but for the purpose of this article, we'll focus on creating a simple certificate that will work with SignTool. このコマンドレットの使用とその例について詳しくは、「New-SelfSignedCertificate」をご覧ください。For more examples and uses of this cmdlet, see New-SelfSignedCertificate.

前の例の AppxManifest.xml ファイルに基づいて、次の構文を使用して証明書を作成する必要があります。Based on the AppxManifest.xml file from the previous example, you should use the following syntax to create a certificate. 管理者特権の PowerShell プロンプトで、次のコマンドを実行します。In an elevated PowerShell prompt:

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}")

いくつかのパラメーターの詳細については、次の点に注意してください。Note the following details about some of the parameters:

  • Keyusage: このパラメーターは、証明書を使用できるかどうかを定義します。KeyUsage: This parameter defines what the certificate may be used for. 自己署名証明書の場合、このパラメーターはdigitalsignature ビットに設定する必要があります。For a self-signing certificate, this parameter should be set to DigitalSignature.

  • Textextension: このパラメーターには、次の拡張機能の設定が含まれています。TextExtension: This parameter includes settings for the following extensions:

    • 拡張キー使用法 (EKU): この拡張機能は、証明された公開キーを使用できる追加の目的を示します。Extended Key Usage (EKU): This extension indicates additional purposes for which the certified public key may be used. 自己署名証明書の場合、このパラメーターには拡張文字列 "2.5.29.37 = {text} 1.3.6.1.5.5.7.3.3" を含める必要があります。これは、証明書がコード署名に使用されることを示します。For a self-signing certificate, this parameter should include the extension string "2.5.29.37={text}1.3.6.1.5.5.7.3.3", which indicates that the certificate is to be used for code signing.

    • 基本制限: この拡張機能は、証明書が証明機関 (CA) であるかどうかを示します。Basic Constraints: This extension indicates whether or not the certificate is a Certificate Authority (CA). 自己署名証明書の場合、このパラメーターには拡張文字列 "2.5.29.19 = {text}" を含める必要があります。これは、証明書が CA ではなく end エンティティであることを示します。For a self-signing certificate, this parameter should include the extension string "2.5.29.19={text}", which indicates that the certificate is an end entity (not a CA).

このコマンドを実行すると、"-CertStoreLocation" パラメーターで指定されたローカル証明書ストアに証明書が追加されます。After running this command, the certificate will be added to the local certificate store, as specified in the "-CertStoreLocation" parameter. コマンドの結果によって、証明書の拇印も生成されます。The result of the command will also produce the certificate's thumbprint.

次のコマンドを使って、PowerShell ウィンドウで証明書を表示できます。You can view your certificate in a PowerShell window by using the following commands:

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

これにより、ローカル ストア内のすべての証明書が表示されます。This will display all of the certificates in your local store.

証明書のエクスポートExport a certificate

ローカル ストアの証明書を Personal Information Exchange (.pfx) ファイルにエクスポートするには、Export-PfxCertificate コマンドレットを使用します。To export the certificate in the local store to a Personal Information Exchange (PFX) file, use the Export-PfxCertificate cmdlet.

Export-PfxCertificate コマンドレットを使用する場合は、パスワードを作成して使用するか、"-ProtectTo" パラメーターを使用して、パスワードなしでファイルにアクセスできるユーザーまたはグループを指定する必要があります。When using Export-PfxCertificate, you must either create and use a password or use the "-ProtectTo" parameter to specify which users or groups can access the file without a password. "-Password" または "-ProtectTo" パラメーターのいずれかを使用しない場合、エラーが表示されます。Note that an error will be displayed if you don't use either the "-Password" or "-ProtectTo" parameter.

Password を使用Password usage

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

ProtectTo を使用ProtectTo usage

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

証明書を作成してエクスポートしたら、SignTool を使ってアプリ パッケージに署名する準備が整いました。After you create and export your certificate, you're ready to sign your app package with SignTool. 手動によるパッケージ化プロセスの次の手順については、「SignTool を使ったアプリ パッケージの署名」をご覧ください。For the next step in the manual packaging process, see Sign an app package using SignTool.

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

ローカル コンピューターの証明書ストアに証明書を追加することによって、コンピューター上のすべてのユーザーの証明書の信頼に影響します。By adding a certificate to local machine certificate stores, you affect the certificate trust of all users on the computer. システムの信頼性を損なうのを防ぐために、これらの証明書が不要になったときには、削除することをお勧めします。It is recommended that you remove those certificates when they are no longer necessary to prevent them from being used to compromise system trust.