署名についてAbout Signing

簡単な説明Short description

PowerShell の実行ポリシーに準拠するようにスクリプトに署名する方法について説明します。Explains how to sign scripts so that they comply with the PowerShell execution policies.

長い説明Long description

制限された実行ポリシーでは、スクリプトの実行は許可されていません。The Restricted execution policy does not permit any scripts to run. AllSignedRemoteSigned の実行ポリシーによって、PowerShell がデジタル署名のないスクリプトを実行できなくなります。The AllSigned and RemoteSigned execution policies prevent PowerShell from running scripts that do not have a digital signature.

このトピックでは、実行ポリシーが RemoteSigned されている場合でも、署名されていない選択したスクリプトを実行する方法と、独自に使用するスクリプトに署名する方法について説明します。This topic explains how to run selected scripts that are not signed, even while the execution policy is RemoteSigned, and how to sign scripts for your own use.

PowerShell 実行ポリシーの詳細については、「 about_Execution_Policies」を参照してください。For more information about PowerShell execution policies, see about_Execution_Policies.

署名されたスクリプトの実行を許可するにはTo permit signed scripts to run

コンピューターで PowerShell を初めて起動するときは、 制限 された実行ポリシー (既定) が有効になっている可能性があります。When you start PowerShell on a computer for the first time, the Restricted execution policy (the default) is likely to be in effect.

制限付き ポリシーでは、スクリプトの実行は許可されていません。The Restricted policy does not permit any scripts to run.

コンピューターで有効な実行ポリシーを見つけるには、次のように入力します。To find the effective execution policy on your computer, type:

Get-ExecutionPolicy

ローカルコンピューター上で作成され、他のユーザーから署名されたスクリプトを実行するには、[管理者として実行] オプションを使用して PowerShell を起動し、次のコマンドを使用してコンピューターの実行ポリシーを RemoteSigned に変更します。To run unsigned scripts that you write on your local computer and signed scripts from other users, start PowerShell with the Run as Administrator option and then use the following command to change the execution policy on the computer to RemoteSigned:

Set-ExecutionPolicy RemoteSigned

詳細については、コマンドレットのヘルプトピックを参照してください Set-ExecutionPolicyFor more information, see the help topic for the Set-ExecutionPolicy cmdlet.

RemoteSigned 実行ポリシーを使用した未署名のスクリプトの実行Running unsigned scripts using the RemoteSigned execution policy

PowerShell の実行ポリシーが RemoteSigned の場合、電子メールやインスタントメッセージングプログラムを通じて受信する署名されていないスクリプトを含め、インターネットからダウンロードされた未署名のスクリプトは実行されません。If your PowerShell execution policy is RemoteSigned, PowerShell will not run unsigned scripts that are downloaded from the internet, including unsigned scripts you receive through email and instant messaging programs.

ダウンロードしたスクリプトを実行しようとすると、PowerShell によって次のエラーメッセージが表示されます。If you try to run a downloaded script, PowerShell displays the following error message:

The file <file-name> cannot be loaded. The file <file-name> is not digitally
signed. The script will not execute on the system. Please see "Get-Help
about_Signing" for more details.

スクリプトを実行する前に、コードを確認して、信頼できることを確認してください。Before you run the script, review the code to be sure that you trust it. スクリプトは、実行可能プログラムと同じ効果があります。Scripts have the same effect as any executable program.

署名されていないスクリプトを実行するには、Unblock-File コマンドレットを使用するか、次の手順を使用します。To run an unsigned script, use the Unblock-File cmdlet or use the following procedure.

  1. スクリプトファイルをコンピューターに保存します。Save the script file on your computer.
  2. [スタート] をクリックし、[マイコンピューター] をクリックして、保存されているスクリプトファイルを探します。Click Start, click My Computer, and locate the saved script file.
  3. スクリプトファイルを右クリックし、[プロパティ] をクリックします。Right-click the script file, and then click Properties.
  4. [ブロックの解除] をクリックします。Click Unblock.

インターネットからダウンロードされたスクリプトがデジタル署名されていても、その発行元を信頼するように選択していない場合は、PowerShell によって次のメッセージが表示されます。If a script that was downloaded from the internet is digitally signed, but you have not yet chosen to trust its publisher, PowerShell displays the following message:

Do you want to run software from this untrusted publisher?
The file <file-name> is published by CN=<publisher-name>. This
publisher is not trusted on your system. Only run scripts
from trusted publishers.

[V] Never run  [D] Do not run  [R] Run once  [A] Always run
[?] Help (default is "D"):

発行元を信頼する場合は、[一度だけ実行する] または [常に実行する] を選択します。If you trust the publisher, select "Run once" or "Always run." 発行元を信頼していない場合は、[実行しない] または [実行しない] のいずれかを選択します。If you do not trust the publisher, select either "Never run" or "Do not run." [実行しない] または [常に実行する] を選択した場合、PowerShell はこのパブリッシャーに対して再度メッセージを表示しません。If you select "Never run" or "Always run," PowerShell will not prompt you again for this publisher.

スクリプトの署名方法Methods of signing scripts

作成したスクリプトと他のソースから取得したスクリプトに署名することができます。You can sign the scripts that you write and the scripts that you obtain from other sources. 任意のスクリプトに署名する前に、各コマンドを調べて、実行しても安全かどうかを確認します。Before you sign any script, examine each command to verify that it is safe to run.

コード署名のベストプラクティスについては、「 コード署名のベストプラクティス」を参照してください。For best practices about code signing, see Code-Signing Best Practices.

スクリプトファイルに署名する方法の詳細については、「 get-authenticodesignature」を参照してください。For more information about how to sign a script file, see Set-AuthenticodeSignature.

New-SelfSignedCertificatePowerShell 3.0 の PKI モジュールで導入されたコマンドレットは、テストに適した自己署名証明書を作成します。The New-SelfSignedCertificate cmdlet, introduced in the PKI module in PowerShell 3.0, creates a self-signed certificate that is Appropriate for testing. 詳細については、New-SelfSignedCertificate コマンドレットのヘルプトピックを参照してください。For more information, see the help topic for the New-SelfSignedCertificate cmdlet.

デジタル署名をスクリプトに追加するには、コード署名証明書を使用して署名する必要があります。To add a digital signature to a script, you must sign it with a code signing certificate. スクリプトファイルの署名には、次の2種類の証明書が適しています。Two types of certificates are suitable for signing a script file:

  • 証明機関によって作成された証明書: 有料では、パブリック証明機関が id を検証し、コード署名証明書を提供します。Certificates that are created by a certification authority: For a fee, a public certification authority verifies your identity and gives you a code signing certificate. 信頼できる証明機関から証明書を購入すると、他のコンピューターが証明機関を信頼しているため、Windows を実行している他のコンピューターのユーザーとスクリプトを共有できます。When you purchase your certificate from a reputable certification authority, you are able to share your script with users on other computers that are running Windows because those other computers trust the certification authority.

  • 証明書を作成する: 自分のコンピューターが証明書を作成する機関である自己署名証明書を作成できます。Certificates that you create: You can create a self-signed certificate for which your computer is the authority that creates the certificate. この証明書は無料で使用でき、コンピューター上でスクリプトの記述、署名、および実行を行うことができます。This certificate is free of charge and enables you to write, sign, and run scripts on your computer. ただし、自己署名証明書によって署名されたスクリプトは、他のコンピューターでは実行されません。However, a script signed by a self-signed certificate will not run on other computers.

通常は、自己署名証明書を使用して、自分で使用するために作成したスクリプトに署名したり、安全であることを確認した他のソースから取得したスクリプトに署名したりすることができます。Typically, you would use a self-signed certificate only to sign scripts that you write for your own use and to sign scripts that you get from other sources that you have verified to be safe. 企業内でも共有されるスクリプトには適していません。It is not appropriate for scripts that will be shared, even within an enterprise.

自己署名証明書を作成する場合は、証明書に対して強力な秘密キーの保護を有効にする必要があります。If you create a self-signed certificate, be sure to enable strong private key protection on your certificate. これにより、悪意のあるプログラムがユーザーに代わってスクリプトに署名するのを防ぐことができます。This prevents malicious programs from signing scripts on your behalf. 手順については、このトピックの最後に記載されています。The instructions are included at the end of this topic.

自己署名証明書の作成Create a self-signed certificate

自己署名証明書を作成するには、 New-SelfSignedCertificate PKI モジュールのコマンドレットを使用します。To create a self-signed certificate, use the New-SelfSignedCertificate cmdlet in the PKI module. このモジュールは PowerShell 3.0 で導入され、Windows 8 および Windows Server 2012 に含まれています。This module is introduced in PowerShell 3.0 and is included in Windows 8 and Windows Server 2012. 詳細については、コマンドレットのヘルプトピックを参照してください New-SelfSignedCertificateFor more information, see the help topic for the New-SelfSignedCertificate cmdlet.

以前のバージョンの Windows で自己署名証明書を作成するには、証明書作成ツールを使用し MakeCert.exe ます。To create a self-signed certificate in earlier versions of Windows, use the Certificate Creation tool MakeCert.exe. このツールは、Microsoft .NET SDK (バージョン1.1 以降) と Microsoft Windows SDK に含まれています。This tool is included in the Microsoft .NET SDK (versions 1.1 and later) and in the Microsoft Windows SDK.

MakeCert.exe ツールの構文とパラメーターの説明の詳細については、「 証明書作成ツール (MakeCert.exe)」を参照してください。For more information about the syntax and the parameter descriptions of the MakeCert.exe tool, see Certificate Creation Tool (MakeCert.exe).

MakeCert.exe ツールを使用して証明書を作成するには、SDK コマンドプロンプトウィンドウで次のコマンドを実行します。To use the MakeCert.exe tool to create a certificate, run the following commands in an SDK Command Prompt window.

注: 最初のコマンドは、コンピューターのローカル証明機関を作成します。Note: The first command creates a local certification authority for your computer. 2番目のコマンドは、証明機関から個人証明書を生成します。The second command generates a personal certificate from the certification authority.

注: コマンドは、表示されたとおりにコピーまたは入力できます。Note: You can copy or type the commands exactly as they appear. 証明書の名前は変更できますが、置換は不要です。No substitutions are necessary, although you can change the certificate name.

makecert -n "CN=PowerShell Local Certificate Root" -a sha1 `
-eku 1.3.6.1.5.5.7.3.3 -r -sv root.pvk root.cer `
-ss Root -sr localMachine

makecert -pe -n "CN=PowerShell User" -ss MY -a sha1 `
-eku 1.3.6.1.5.5.7.3.3 -iv root.pvk -ic root.cer

MakeCert.exe ツールでは、秘密キーのパスワードの入力を求められます。The MakeCert.exe tool will prompt you for a private key password. パスワードは、同意せずに証明書を使用またはアクセスできないようにします。The password ensures that no one can use or access the certificate without your consent. 覚えやすいパスワードを作成して入力します。Create and enter a password that you can remember. このパスワードは後で証明書を取得するために使用します。You will use this password later to retrieve the certificate.

証明書が正しく生成されたことを確認するには、次のコマンドを使用して、コンピューター上の証明書ストアにある証明書を取得します。To verify that the certificate was generated correctly, use the following command to get the certificate in the certificate store on the computer. 証明書ファイルがファイルシステムディレクトリに見つかりません。You will not find a certificate file in the file system directory.

PowerShell プロンプトで次のように入力します。At the PowerShell prompt, type:

Get-ChildItem cert:\CurrentUser\my -codesigning

このコマンドは、PowerShell 証明書プロバイダーを使用して、証明書に関する情報を表示します。This command uses the PowerShell Certificate provider to view information about the certificate.

証明書が作成された場合、出力には、次のような画面で証明書を識別する サムプリント が表示されます。If the certificate was created, the output shows the thumbprint that identifies the certificate in a display that resembles the following:

Directory: Microsoft.PowerShell.Security\Certificate::CurrentUser\My

Thumbprint                                Subject
----------                                -------
4D4917CB140714BA5B81B96E0B18AAF2C4564FDF  CN=PowerShell User ]

スクリプトに署名するSign a script

自己署名証明書を作成したら、スクリプトに署名することができます。After you create a self-signed certificate, you can sign scripts. AllSigned 実行ポリシーを使用すると、スクリプトに署名することで、コンピューターでスクリプトを実行することが許可されます。If you use the AllSigned execution policy, signing a script permits you to run the script on your computer.

次のサンプルスクリプトでは、 Add-Signature.ps1 スクリプトに署名します。The following sample script, Add-Signature.ps1, signs a script. ただし、 AllSigned 実行ポリシーを使用している場合は、スクリプトを実行する前に署名する必要があり Add-Signature.ps1 ます。However, if you are using the AllSigned execution policy, you must sign the Add-Signature.ps1 script before you run it.

重要

スクリプトは、ASCII または UTF8NoBOM エンコードを使用して保存する必要があります。The script must be saved using ASCII or UTF8NoBOM encoding. 別のエンコードを使用するスクリプトファイルに署名することができます。You can sign a script file that uses a different encoding. ただし、スクリプトを実行できないか、スクリプトを含むモジュールをインポートできません。But the script fails to run or the module containing the script fails to import.

このスクリプトを使用するには、テキストファイルに次のテキストをコピーして、という名前を指定し Add-Signature.ps1 ます。To use this script, copy the following text into a text file, and name it Add-Signature.ps1.

## Signs a file
param([string] $file=$(throw "Please specify a filename."))
$cert = @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]
Set-AuthenticodeSignature $file $cert

スクリプトファイルに署名するには Add-Signature.ps1 、PowerShell コマンドプロンプトで次のコマンドを入力します。To sign the Add-Signature.ps1 script file, type the following commands at the PowerShell command prompt:

$cert = @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]
Set-AuthenticodeSignature add-signature.ps1 $cert

スクリプトが署名されたら、ローカルコンピューターで実行できます。After the script is signed, you can run it on the local computer. ただし、このスクリプトは、PowerShell の実行ポリシーが信頼できる機関からのデジタル署名を必要とするコンピューターでは実行されません。However, the script will not run on computers on which the PowerShell execution policy requires a digital signature from a trusted authority. 試行すると、PowerShell によって次のエラーメッセージが表示されます。If you try, PowerShell displays the following error message:

The file C:\remote_file.ps1 cannot be loaded. The signature of the
certificate cannot be verified.
At line:1 char:15
+ .\ remote_file.ps1 <<<<

書き込みが行われていないスクリプトを実行したときに PowerShell でこのメッセージが表示される場合は、署名されていないスクリプトを扱う場合と同様に、ファイルを扱います。If PowerShell displays this message when you run a script that you did not write, treat the file as you would treat any unsigned script. コードを確認して、スクリプトを信頼できるかどうかを判断します。Review the code to determine whether you can trust the script.

証明書の秘密キーの強力な保護を有効にするEnable strong private key protection for your certificate

コンピューターにプライベート証明書がある場合は、悪意のあるプログラムによって、ユーザーに代わってスクリプトに署名できる可能性があります。これにより、PowerShell の実行が承認されます。If you have a private certificate on your computer, malicious programs might be able to sign scripts on your behalf, which authorizes PowerShell to run them.

自動的に署名を行わないようにするには、証明書マネージャーを使用し Certmgr.exe て署名証明書をファイルにエクスポートし .pfx ます。To prevent automated signing on your behalf, use Certificate Manager Certmgr.exe to export your signing certificate to a .pfx file. 証明書マネージャーは、Microsoft .NET SDK、Microsoft Windows SDK、および internet Explorer に含まれています。Certificate Manager is included in the Microsoft .NET SDK, the Microsoft Windows SDK, and in internet Explorer.

証明書をエクスポートするには:To export the certificate:

  1. 証明書マネージャーを起動します。Start Certificate Manager.
  2. PowerShell ローカル証明書のルートによって発行された証明書を選択します。Select the certificate issued by PowerShell Local Certificate Root.
  3. [エクスポート] をクリックして、証明書のエクスポートウィザードを開始します。Click Export to start the Certificate Export Wizard.
  4. [はい、秘密キーをエクスポートします] を選択し、[次へ] をクリックします。Select "Yes, export the private key", and then click Next.
  5. [強力な保護を有効にする] を選択します。Select "Enable strong protection."
  6. パスワードを入力し、確認のためにもう一度入力します。Type a password, and then type it again to confirm.
  7. ファイル名拡張子が .pfx のファイル名を入力します。Type a file name that has the .pfx file name extension.
  8. [完了] をクリックします。Click Finish.

証明書を再インポートするには:To re-import the certificate:

  1. 証明書マネージャーを起動します。Start Certificate Manager.
  2. [インポート] をクリックして、証明書のインポートウィザードを開始します。Click Import to start the Certificate Import Wizard.
  3. エクスポートプロセスで作成した .pfx ファイルの場所を開きます。Open to the location of the .pfx file that you created during the export process.
  4. [パスワード] ページで、[秘密キーの保護を強力にする] を選択し、エクスポート処理中に割り当てたパスワードを入力します。On the Password page, select "Enable strong private key protection", and then enter the password that you assigned during the export process.
  5. [ 個人 ] 証明書ストアを選択します。Select the Personal certificate store.
  6. [完了] をクリックします。Click Finish.

署名の有効期限が切れないようにするPrevent the signature from expiring

スクリプトのデジタル署名は、署名証明書の有効期限が切れている間に、署名証明書の有効期限が切れるか、タイムスタンプサーバーでスクリプトが署名されたことを確認できる限り有効です。The digital signature in a script is valid until the signing certificate expires or as long as a timestamp server can verify that the script was signed while the signing certificate was valid.

ほとんどの署名証明書は1年間有効であるため、タイムスタンプサーバーを使用すると、ユーザーがスクリプトを何年も使用できるようになります。Because most signing certificates are valid for one year only, using a time stamp server ensures that users can use your script for many years to come.

関連項目See also

about_Execution_Policiesabout_Execution_Policies

about_Profilesabout_Profiles

Get-ExecutionPolicyGet-ExecutionPolicy

Set-ExecutionPolicySet-ExecutionPolicy

Set-AuthenticodeSignatureSet-AuthenticodeSignature

コード署名の概要Introduction to Code Signing