PowerShell HelpFile - about_Signing
 記事記号:[me1582] 初版:2011/May/10

この文書は、Windows PowerShellのヘルプ機能で表示される内容を再構成したものです。

トピック
    about_signing

簡易説明
    Windows PowerShell の実行ポリシーに準拠するようにスクリプトに署名する方法に
    ついて説明します。

詳細説明
    Restricted 実行ポリシーでは、すべてのスクリプトの実行が禁止されます。
    AllSigned 実行ポリシーおよび RemoteSigned 実行ポリシーでは、デジタル署名がな
    いスクリプトの実行が禁止されます。

    このトピックでは、実行ポリシーが RemoteSigned の場合であっても選択した署名さ
    れていないスクリプトを実行する方法について説明します。加えて、自分専用にスク
    リプトに署名する方法について説明します。
    
    Windows PowerShell の実行ポリシーの詳細については、「about_Execution_Policy」
    を参照してください。


 署名されているスクリプトの実行の許可
 -------------------------------
    コンピューター上で初めて Windows PowerShell を起動すると、通常は Restricted 
    実行ポリシー (既定値) が有効になります。

    Restricted 実行ポリシーでは、すべてのスクリプトの実行が禁止されます。

    コンピューター上の有効な実行ポリシーを調べるには、次のように入力します。

        get-executionpolicy

    自分がローカル コンピューター上で作成した署名のないスクリプトおよび他のユー
    ザーの署名が付けられたスクリプトを実行するには、次のコマンドを使用して、コン
    ピューター上の実行ポリシーを RemoteSigned に変更します。

	set-executionpolicy remotesigned

    詳細については、「Set-ExecutionPolicy」を参照してください。


 署名なしスクリプトの実行 (RemoteSigned 実行ポリシー)
 --------------------------------------------------------
     Windows PowerShell 実行ポリシーが RemoteSigned の場合、Windows PowerShell 
     は、インターネットからダウンロードされた署名されていないスクリプト (電子メ
     ール プログラムやインスタント メッセージング プログラムを介して受け取った
     署名されていないスクリプトを含む) を実行しません。

    ダウンロードしたスクリプトを実行しようとすると、次のエラー メッセージが表示
    されます。

        ファイル <file-name> を読み込めません。ファイル <file-name> はデジタル
        署名されていません。このスクリプトはシステムで実行されません。詳細につ
        いては、「Get-Help about_signing」と入力してヘルプを参照してください。

    スクリプトを実行する前に、そのコードが信頼できることを確認してください。
    スクリプトは、実行可能プログラムと同じ効果があります。

    署名なしスクリプトを実行するには、以下の手順を実行します。

        1. スクリプト ファイルをコンピューターに保存します。
        2. [スタート] ボタンをクリックし、[マイ コンピューター] をクリックして、
           保存したスクリプト ファイルを参照します。
        3. スクリプト ファイルを右クリックし、[プロパティ] をクリックします。
        4. [ブロックの解除] をクリックします。

    インターネットからダウンロードしたスクリプトがデジタル署名されていても、その
    発行元を信頼するように選択していない場合は、次のメッセージが表示されます。

        この信頼されていない発行元からのソフトウェアを実行しますか? ファイル <fi
        le-name> の発行元は CN=<publisher-name> であり、このシステムで信頼されて
        いません。信頼された発行元からのスクリプトのみを実行してください。

        [V] 常に実行しない [D] 実行しない [R] 一度だけ実行する [A] 常に実行する 
        [?] ヘルプ (既定値は "D") :
    
        発行元が信頼できる場合は、[一度だけ実行する] または [常に実行する] を選
        択します。発行元が信頼できない場合は、[常に実行しない] または [実行しな
        い] を選択します。[常に実行しない] または [常に実行する] を選択した場合
        は、この発行元に関するプロンプトは二度と表示されません。
    

 スクリプトの署名方法
 --------------------------
    自分で記述したスクリプトおよび他のソースから入手したスクリプトに署名できます。
    スクリプトに署名する前に、各コマンドをチェックして、実行しても安全であること
    を確認します。

    コードの署名に関するベスト プラクティスについては、「Code-Signing Best Pract
    ices (コードの署名に関するベスト プラクティス)」(http://go.microsoft.com/fwl
    ink/?LinkId=119096) を参照してください。

    スクリプト ファイルを署名する方法の詳細については、「Set-AuthenticodeSignatu
    re」を参照してください。

    スクリプトにデジタル署名を追加するには、コード署名用の証明書を使用してスクリ
    プトに署名する必要があります。スクリプト ファイルの署名には、次の 2 種類の証
    明書が適しています。

        -- 証明機関によって作成された証明書:

           公的な証明機関が有料でユーザーの身元を確認し、コード署名用の証明書を
           発行します。信頼できる証明機関から証明書を購入した場合は、Windows を
           実行している他のコンピューターがその証明機関を信頼しているので、その
           コンピューター上のユーザーとスクリプトを共有できます。

        -- 独自に作成した証明書:

           証明書を作成する証明機関として自分のコンピューターを使用して、自己署
           名入り証明書を作成できます。この証明書は無料で、自分のコンピューター
           上でスクリプトを作成し、署名して、実行できます。ただし、自己署名入り
           証明書によって署名されたスクリプトは他のコンピューターで実行されない
           可能性があります。

    通常、自己署名入り証明書は、自分で使用するために作成したスクリプトに署名する
    場合や、安全性が確認されている他のソースから取得したスクリプトに署名する場合
    にのみ使用します。自己署名入り証明書は、社内で共有されるスクリプトには適しま
    せん。

    自己署名入り証明書を作成する場合は、証明書に対する強力な秘密キー保護を有効に
    してください。これによって、悪意のあるプログラムがスクリプトに署名するのを回
    避できます。手順については、このトピックの最後で説明します。


 自己署名入り証明書の作成
 --------------------------------
    自己署名入り証明書を作成するには、証明書作成ツール (MakeCert.exe) を使用しま
    す。このツールは、Microsoft .NET Framework SDK (バージョン 1.1 以降) および 
    Microsoft Windows SDK に含まれています。

    MakeCert.exe ツールの構文およびパラメーターの詳細については、MSDN (Microsoft 
    Developer Network) ライブラリの「Certificate Creation Tool (証明書作成ツール、
    MakeCert.exe)」(http://go.microsoft.com/fwlink/?LinkId=119097) を参照してく
    ださい。

    MakeCert.exe ツールを使用して証明書を作成するには、SDK のコマンド プロンプト 
    ウィンドウで次のコマンドを実行します。
 
    注: 最初のコマンドで、使用しているコンピューター用のローカルな証明機関を作成
        します。2 番目のコマンドで、その証明機関から個人証明書を生成します。

    注: ここに示されているコマンドをそのままコピーまたは入力してください。
        要素を置き換える必要はありません。ただし、必要に応じて証明書の名前は変更
        できます。

            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 ツールによって、秘密キー パスワードに関するプロンプトが表示され
    ます。パスワードを設定することで、自分の同意なしにだれも証明書を使用したり証
    明書にアクセスしたりできなくなります。自分が覚えることができるパスワードを作
    成して入力します。このパスワードは、後で証明書を取得する場合に使用します。

    証明書が適切に生成されたことを確認するために、次のコマンドを使用して、コンピ
    ューター上の証明書ストアにある証明書を取得します (ファイル システム ディレク
    トリ内では証明書ファイルは見つかりません)。

    Windows PowerShell プロンプトで、次のように入力します。

            get-childitem cert:\CurrentUser\my -codesigning

    このコマンドは、Windows PowerShell 証明書プロバイダーを使用して、証明書に関
    する情報を表示します。

    証明書が作成されている場合、次のような証明書を識別する拇印が出力として表示さ
    れます。


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

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

 スクリプトの署名
 -------------

    自己署名入り証明書を作成したら、スクリプトに署名できます。AllSigned 実行ポリ
    シーを使用している場合は、スクリプトに署名することによって、コンピューター上
    でそのスクリプトを実行できます。

    次に示すサンプル スクリプト Add-Signature.ps1 は、スクリプトに署名します。た
    だし、AllSigned 実行ポリシーを使用している場合は、Add-Signature.ps1 スクリプ
    トを実行する前に署名する必要があります。

    このスクリプトを使用するには、次のテキストをテキスト ファイルにコピーし、Add
    -Signature.ps1 という名前で保存します。

    注: スクリプト ファイルに .txt ファイル名拡張子が付いていないことを確認してく
    ださい。テキスト エディターによって ".txt" が付加されている場合は、"add-signa
    ture.ps1" のようにファイル名を引用符で囲んでください。


            ## add-signature.ps1
            ## ファイルに署名する
            param([string] $file=$(throw "Please specify a filename.")) 
            $cert = @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0] 
            Set-AuthenticodeSignature $file $cert


    Add-Signature.ps1 スクリプト ファイルに署名するには、Windows PowerShell のコ
    マンド プロンプトで次のコマンドを入力します。

        $cert = @(Get-ChildItem cert:\CurrentUser\My -codesigning)[0]

        Set-AuthenticodeSignature add-signature.ps1 $cert


    署名したスクリプトは、ローカル コンピューター上で実行できます。
    ただし、Windows PowerShell 実行ポリシーによって、信頼された機関からのデジタル
    署名が要求されるコンピューター上では、そのスクリプトを実行できません。スクリ
    プトを実行しようとした場合、次のエラー メッセージが表示されます。

        ファイル C:\remote_file.ps1 を読み込めません。証明書の署名を検証できません。
        行:1 文字:15
        + .\ remote_file.ps1 <<<<

    自作スクリプト以外のスクリプトを実行してこのメッセージが表示された場合は、そ
    のファイルを署名なしスクリプトと同様に処理します。コードを調べて、スクリプト
    が信頼できるかどうかを判定します。


 証明書に対する強力な秘密キー保護の有効化

    コンピューター上にプライベート証明書が存在する場合は、悪意のあるプログラムが
    勝手にスクリプトに署名して、Windows PowerShell にその実行を認めさせる可能性
    があります。

    自動署名を防止するには、証明書マネージャー (Certmgr.exe) を使用して、署名用
    証明書を .pfx ファイルにエクスポートします。証明書マネージャーは、Microsoft 
    .NET Framework SDK、Microsoft Windows SDK、および Internet Explorer 5.0 以
    降に付属しています。

    証明書をエクスポートするには、以下の手順に従います。

        1. 証明書マネージャーを起動します。
    
        2. PowerShell ローカル証明書ルートによって発行された証明書を選択します。

        3. [エクスポート] をクリックして、証明書のエクスポート ウィザードを起動
           します。

        4. [はい、秘密キーをエクスポートします] を選択し、[次へ] をクリックします。
    
        5. [強力な保護を有効にする] を選択します。

        6. パスワードを入力し、確認のためにもう一度パスワードを入力します。

        7. .pfx ファイル名拡張子付きのファイル名を入力します。

        8. [完了] をクリックします。


    証明書を再インポートするには、以下の手順に従います。

        1. 証明書マネージャーを起動します。

        2. [インポート] をクリックして、証明書のインポート ウィザードを起動します。

        3. エクスポート プロセスで作成した .pfx ファイルの場所を指定します。

        4. [パスワード] ページで、[秘密キーの保護を強力にする] を選択し、エクス
           ポート プロセスで割り当てたパスワードを入力します。

        5. [個人] 証明書ストアを選択します。

        6. [完了] をクリックします。



 署名の期限切れの防止
 -----------------------------------
     スクリプトのデジタル署名は、署名用証明書が有効期限切れになるまで、または署
     名用証明書が有効な期間中にスクリプトが署名されたことをタイム スタンプ サー
     バーが確認できる限り、有効です。

     ほとんどの署名用証明書の有効期間は 1 年間なので、タイム スタンプ サーバーを
     使用して、自分が作成したスクリプトを長期にわたってユーザーが使用できるよう
     にすることができます。


関連項目
    about_Execution_Policies
    about_Profiles
    Get-ExecutionPolicy
    Set-ExecutionPolicy
    Set-AuthenticodeSignature
    「Introduction to Code Signing (コード署名の概要)」
    (http://go.microsoft.com/fwlink/?LinkId=106296)
	
記事で解説しているパソコンの環境
 基本ソフト: Windows 7
 キーワード: Windows PowerShell、ヘルプ、HelpFile、about_Signing
ご利用数: 1917651
感想・要望・問い合わせは こちら