Share via


テスト署名

Windows Vista 以降、64 ビットバージョンの Windows では、ドライバーを含め、カーネル モードで稼働する全ソフトウェアのインストール要件として、デジタル署名が必要となりました。 最初は、F8 スイッチ (Windows が読み込まれる前に各ブートで) を使用して、ドライバーで有効な署名を要求する読み込み時の適用を一時的に無効にすることができます。 しかし、これは最初の数回の使用後に面倒になります。 正しい BCDEdit コマンドを使用した後、同じロードタイム強制チェックを無効にするカーネル デバッガーをテスト コンピューターにアタッチできます。 ただし、最終的には、開発中にドライバーをテスト署名し、さらに最終的にドライバーをユーザーに公開する前にリリース署名する必要があります。

開発中およびテスト中の署名されていないドライバーのインストール

『Installing an Unsigned Driver during Development and Test』からの抜粋。

既定では、64 ビット バージョンの Windows Vista 以降のバージョンの Windows では、カーネルがドライバー署名を確認できる場合にのみ、カーネル モード ドライバーが読み込まれます。 ただし、この既定の動作は、初期のドライバー開発時および非自動化テストで無効にすることができます。 開発者は、次のいずれかのメカニズムを使用して、有効なドライバー署名の読み込み時の適用を一時的に無効にすることができます。 ただし、プラグ アンド プレイ (PnP) によってインストールされたドライバーのテストを完全に自動化するには、ドライバーのカタログ ファイルに署名する必要があります。 Windows Vista 以降のバージョンの Windows では、ドライバーのインストールを承認するシステム管理者を必要とする署名されていないドライバーのドライバー署名ダイアログ ボックスが表示されるため、ドライバーの署名が必要です。これにより、必要な特権を持たないユーザーがドライバーをインストールしてデバイスを使用することを防いでいます。 この PnP ドライバーのインストール動作は、Windows Vista 以降のバージョンの Windows では無効にできません。

F8 高度なブート オプションを使用

Windows Vista 以降のバージョンの Windows では、現在のシステム セッションに対してのみカーネル モード ドライバーの読み込み時署名の適用を無効にする F8 高度なブート オプション ("ドライバー署名の強制を無効にする" ) がサポートされています。 この設定は、システムの再起動後は保持されません。

再起動中に次のブート オプション画面が表示され、ドライバー署名の適用を無効にするオプションが提供されます。 このプロビジョニングで、テスト目的で署名されていないドライバーのインストールが可能になります。

screen shot showing the f8 advanced boot options.

カーネル デバッガーをアタッチして署名の検証を無効にします

開発またはテスト コンピューターにアクティブなカーネル デバッガーをアタッチすると、カーネル モード ドライバーの読み込み時署名の適用が無効になります。 このデバッグ構成を使用するには、開発またはテスト コンピューターにデバッグ コンピューターをアタッチし、次のコマンドを実行して開発またはテスト コンピューターでカーネル デバッグを有効にします。

bcdedit -debug on

BCDEdit を使用するには、ユーザーはシステムの 管理者 グループのメンバーであり、管理者特権のコマンド プロンプトからコマンドを実行する必要があります。 管理者特権のコマンド プロンプト ウィンドウを開くには、Cmd.exe へのデスクトップ ショートカットを作成し、Cmd.exeショートカットを選択して長押し (または右クリック) し、[管理者として実行] を選択します。

ただし、開発者がカーネル デバッガーをアタッチする必要な状況でありながら、読み込み時署名の強制を維持する必要があることに地位してください。 これを行う方法については、「付録 1: カーネル デバッグ モードでのカーネル モード署名検証の適用」を参照してください。

ドライバー パッケージのテスト署名

上記の 2 つの方法を使用してドライバー署名の適用要件を回避する代わりに、最良の方法は、ドライバー パッケージにテスト署名をすることです。 テスト署名とドライバーのインストールは開発用コンピューターで実行できますが、開発用と署名用で一台、テスト用で一台の2台のコンピューターが良いでしょう。

「ドライバー パッケージをテスト署名する方法」からの抜粋

コンピューターへの署名

これは、Windows Vista 以降のバージョンの Windows のドライバー パッケージにテスト署名するために使用されるコンピューターです。 このコンピューターは、Windows XP SP2 以降のバージョンの Windows を実行している必要があります。 ドライバー署名ツールを使用するには、このコンピューターに Windows Vista 以降のバージョンの Windows Driver Kit (WDK) がインストールされている必要があります。 これは、開発用コンピューターでもかまいません。

テスト コンピューター

これは、テスト署名されたドライバー パッケージのインストールとテストに使用されるコンピューターです。 このコンピューターは、Windows XP SP2 以降のバージョンの Windows を実行している必要があります。

署名手順のテスト

ドライバー パッケージには、ドライバー バイナリ、INF ファイル、CAT ファイル、およびその他の必要なファイルが含まれます。 ドライバー パッケージには、ドライバーが複数のターゲット プロセッサの種類用にビルドされている場合、x86、AMD64、IA64 などのサブディレクトリが含まれる場合があります。 開発/署名コンピューターを使用して、次の手順を実行します。

次の手順では、ドライバー パッケージの署名をテストする手順について説明します。

  1. ターゲットのドライバーをビルドします。 Windows 8.0 または Windows 8.1 用のドライバーをビルドする場合は、対応する WDK がインストールされている Visual Studio 2012 または Visual Studio 2013 (Windows 8.0 や 8.1 WDK など) をそれぞれ使用します。

    以下で説明するすべてのコマンド ツールは、対応するツール/ビルド コマンド ウィンドウ Visual Studio 2012 または Visual Studio 2013 から使用する必要があります。

    Note

    Visual Studio のコマンド ツールは、インストール ディレクトリ C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\Shortcuts にあります

    コマンド プロンプトの 5 つのショートカットには、どれにも makecert.exe、inf2cat.exe、signtool.exe、certmgr.exeなどのコマンドがあります。

    最も一般的な [VS2013 の開発者コマンド プロンプト] を選択できます。 ショートカットをタスク バーにピン留めして簡単にアクセスできます。

    Note

    Visual Studio では、ドライバー署名のコマンド ツール アプローチではなく、Visual Studio 2013 開発環境 (IDE とも呼ばれます) を使用してドライバー パッケージに署名することもできます。 詳細については、「付録 2: Visual Studio を使用したドライバーの署名」 を参照してください。

  2. C:\DriverTestPackage など必要なサブディレクトリを維持しながら、ドライバー パッケージ フォルダーを作成し、ドライバーファイルをコピーします。

  3. ドライバー パッケージの inf ファイルを作成します。 エラーを起こさないように、INF ファイルで WDK の InfVerif ツールを使用して inf ファイルをテストします。

  4. 「テスト証明書の作成」からの抜粋

    次のコマンドラインの例では、MakeCert を使用して次のタスクを完了します。

    • Contoso.com(Test)という名前の自己署名テスト証明書を作成します。 この証明書では、サブジェクト名と証明機関 (CA) に同じ名前が使用されます。

    • ContosoTest.cer という名前の出力ファイルに証明書のコピーを配置します。

    • 証明書のコピーを、PrivateCertStore という名前の証明書ストアに配置します。 テスト証明書を PrivateCertStore に配置すると、システム上に存在する可能性のある他の証明書とは分離されます。

    次の MakeCert コマンドを使用して、Contoso.com(Test) の証明書を作成します。

    makecert -r -pe -ss PrivateCertStore -n CN=Contoso.com(Test) ContosoTest.cer
    

    ここで:

    • r オプションは、発行者とサブジェクト名が同じ自己署名証明書を作成します。

    • -pe オプションは、証明書に関連付けられている秘密鍵をエクスポートできることを指定します。

    • ss オプションは、テスト証明書 (PrivateCertStore) を含む証明書ストアの名前を指定します。

    • -n CN= オプションは、証明書の名前である Contoso.com(Test) を指定します。 この名前は、SignTool ツールで証明書を識別するために使用されます。

    • ContosoTest.cer は、Contoso.com(Test) というテスト証明書のコピーを含むファイル名です。 証明書ファイルは、信頼されたルート証明機関の証明書ストアと、信頼された発行元の証明書ストアに、証明書を追加するために使用されます。

    「テスト証明書の表示」からの抜粋

    証明書が作成され、証明書ストアにコピーが配置されると、Microsoft 管理コンソール (MMC) 証明書スナップインを使用してそれを表示できます。 MMC 証明書スナップインを使用して証明書を表示するには、次の操作を行います。

    1. 証明書スナップインを起動するには、Certmgr.msc を実行します。

    2. 証明書スナップインの左ペインで、PrivateCertStore 証明書ストア フォルダーを展開し、[証明書] をダブルクリックします。

    次のスクリーン ショットは、PrivateCertStore 証明書ストア フォルダーの証明書スナップイン ビューを示しています。

    screen shot of the certificate store showing the test certificate .

    Contoso.com(Test) 証明書の詳細を表示するには、右ペインで証明書をダブルクリックします。 次のスクリーン ショットは、証明書の詳細を示しています。

    screen shot of the certificate window displaying general information about the contoso.com (test) certificate.

    [証明書] ダイアログ ボックスに「この CA ルート証明書は信頼されていません。 信頼を有効にするには、この証明書を信頼されたルート証明機関ストアにインストールしてください。」と記載されていますが、これは既定の表示です。 発行元機関 「 Contoso.com(Test) 」が既定で Windows に信頼されていないため、証明書の検証はできません。

  5. カタログ ファイル (.cat 拡張子) を作成します。 次に示すように inf2cat ツールを使用して、カタログ ファイルを作成します。 スイッチにスペースは使用できないことに注意してください。/driver:<no space><full path>, /os: :<no space><os1 name>,:<no space><os2 name> 。

    inf2cat  /v  /driver:C:\DriverTestPackage  /os:7_64,7_x86 ,XP_X86
    

    これにより、ドライバーの .inf ファイルに指定された名前のカタログ ファイルが作成されます。 次に示すように、コンマ区切りの OS をスペースなしで選択的またはすべて追加できます。

    /os:2000,XP_X86,XP_X64,Server2003_X64,Vista_X64,Vista_X86,7_x86,7_64,Server2008_x86,Server2008_x64,Sever2008_IA64,Server2008R2_x86,Server2008R2_x64,Server2008R2_IA64,8_x86,8_x64, 8_ARM, Server8_x64
    

    新しい 8.1 WDK から更新された inf2cat には、6_3_X86、6_3_X64、6_3_ARM、Standard Edition RVER_6_3_X64の /os オプション値があります。

    [バージョン] セクションの INF ファイルの例。

    [Version]
    Signature="$WINDOWS NT$"
    Class=TOASTER
    ClassGuid={B85B7C50-6A01-11d2-B841-00C04FAD5171}
    Provider=%ToastRUs%
    DriverVer=09/21/2006,6.0.5736.1
    CatalogFile.NTx86 = tostx86.cat
    CatalogFile.NTIA64 = tostia64.cat
    CatalogFile.NTAMD64 = tstamd64.cat
    PnpLockdown = 1
    

    /driver (または /drv) オプションは、1 つ以上の INF ファイルを含むディレクトリを指定します。 このディレクトリ内には、1 つ以上の CatalogFile ディレクティブを含む INF ファイルのカタログ ファイルが作成されます。 カタログ ファイル名は 8.3 形式に制限されていません。

    Inf2Cat は、コマンド ライン引数 /os:7_X64 が使用されている場合に tstamd64.cat カタログ ファイルを作成します。 同様に、ツールは、/os:XP_X86 オプションが使用されている場合 toastx86.cat カタログ ファイルを作成します。これは、Server2008R2_IA64の場合と同様です。 必要なカタログ ファイルが 1 つだけの場合は、次に示すように INF ファイル内のエントリが 1 つだけで十分です。

    CatalogFile.NT = toaster.cat
    

    または、

    CatalogFile = toaster.cat
    

    INF ファイルの日付が OS リリース日より大きくない場合、/os パラメーターが Windows 7 用で、INF ファイルに設定された日付が以前の日付であった場合、inf2cat ツールによって次のエラーが報告されます。

    Signability test failed.
    Errors:
    22.9.7: DriverVer set to incorrect date (must be postdated to 4/21/2009 for newest OS) in \toaster.inf
    

    inf2cat ツールは、INF ファイルにエントリがあるすべてのファイルの存在に関する各フォルダーとサブフォルダーのチェックに非常に厳密です。 このようなエントリが見つからない場合は、意味のあるエラー メッセージが表示されます。

    cat ファイルをエクスプローラーから開くには、ファイルをダブルクリックするか右クリックして [開く] を選択します。 [セキュリティ] タブには、GUID 値を含むエントリがいくつか表示されます。 GUID 値を選択すると、次に示すように、ドライバー パッケージのドライバー ファイルや追加された OS を含む詳細が表示されます。

    OSAttr  2:5.1,6.1
    

    5.1 は XP OS のバージョン番号、Windows 7.0 OS の場合は 6.1 です。

    cat ファイルをチェックして、ドライバー ファイルと選択した OS が含まれていることを確認することをお勧めします。 ドライバー ファイルが追加または削除された場合は、INF ファイルが変更されているため、いつでも cat ファイルを再作成してもう一度署名する必要があります。 ここで省略すると、セットアップ ログ ファイル (Vista 以降の場合はsetupapi.dev.log、XP の場合は setupapi.log ファイル) で報告されるインストール エラーが発生します。

  6. 「ドライバー パッケージのカタログ ファイルのテスト署名」からの抜粋

    次のコマンド ラインは、SignTool を実行して次の操作を行う方法を示しています。

    tstamd64.cat カタログファイルにテスト署名をするには、以下のコマンドラインを実行します。

    signtool sign /v /s PrivateCertStore /n Contoso.com(Test) /t http://timestamp.digicert.com tstamd64.cat
    

    ここで:

    • 署名コマンドは、指定されたカタログ ファイル (tstamd64.cat) に署名するように SignTool を設定します。

    • /v オプションは、SignTool が正常な実行と警告メッセージを表示する詳細な操作を有効にします。

    • /s オプションは、テスト証明書 ( PrivateCertStore ) を含む証明書ストアの名前を指定します。

    • /n オプションは、指定した証明書ストアにインストールされている 証明書 ( Contoso.com(Test )) の名前を指定します。

    • /t オプションは 、 デジタル署名のタイムスタンプを設定する TSA (http://timestamp.digicert.com) の URL を指定します。

    重要

    タイム スタンプを含めると、署名者のコード署名秘密キーが侵害された場合に備え、キーの失効に必要な情報が提供されます。

  • tstamd64.cat は、デジタル署名されるカタログ ファイルの名前を指定します。

tstamd64.cat は、デジタル署名されるカタログ ファイルの名前を指定します。 前の説明のように cat ファイルを開くことができます。

  1. 「埋め込み署名によるドライバーのテスト署名」からの抜粋を変更しました

    • 64 ビット バージョンの Windows Vista 以降のバージョンの Windows では、カーネル モード コード署名の要件は、ブートスタート ドライバーに埋め込み署名が必要であることを示しています。 これは、ドライバーのドライバー パッケージにデジタル署名されたカタログ ファイルがあるかどうかに関係なく必要です。

    カーネル モード ドライバーのバイナリ ファイルに署名を埋め込むコマンドを次に示します。

    signtool sign  /v  /s  PrivateCertStore  /n  Contoso.com(Test)  /t http://timestamp.digicert.com   amd64\toaster.sys
    

    amd64\toaster.sys は、埋め込み署名されるカーネル モード バイナリ ファイルの名前を指定します。

    WDK 7.1 インストール ディレクトリ内では、トースター サンプルは src\general\toaster\toastpkg\toastcd\ ディレクトリにあります。 Windows 8 または 8.1 WDK のサンプルは、Microsoft ダウンロード サイトからダウンロードする必要があります。 サンプルには、Windows 8 または 8.1 Windows ドライバーキット は付属していません。

    Windows エクスプローラーでファイルをダブルクリックして開くと、次のスクリーンショットが表示されます。 [署名の表示] が強調表示されていることに注意してください。

    screen shot showing general information of the security catalog file.

    [署名の表示] を選択すると、[証明書の表示] から次の表示オプションとして、下のスクリーンショットが表示され、ダイアログ自体から [証明書のインストール] オプションが表示されます。 以下では、certmgr.exe ツールを使用して証明書をインストールするための推奨コマンド ライン オプションを提供します。

    screen shot showing general information about the digital signature's details.

    screen shot showing general information about the certificate.

ドライバーは、署名コンピューターまたはテスト コンピューターでテストできるようになりました。 テスト コンピューターを使用している場合は、ファイル構造をそのまま保持しているコンピューターにドライバー パッケージをコピーします。 certmgr.exeツールもテスト コンピューターにコピーする必要があります。 テスト用コンピュータを使用する場合は、test-signed Toastpkg ドライバパッケージを c:\toaste 一時フォルダにコピーします。

次の手順では、いずれかのコンピューターでドライバーをテストするために使用する手順について説明します。

  1. 管理者特権のコマンド ウィンドウで、次のコマンドを実行してください。

    bcdedit  /set  testsigning  on
    

    コンピューターを再起動します。

  2. 「CertMgrを使用してテスト コンピューターにテスト証明書をインストールする」から抜粋しました。

    ドライバーのテスト署名に使用された証明書 (.cer) ファイルをテスト コンピューターにコピーします。 証明書ファイルは、テスト コンピューター上の任意のディレクトリにコピーできます。

    次の CertMgr コマンドは、証明書ファイル CertificateFileName.cer の証明書をテスト コンピューターの信頼できるルート証明機関の証明書ストアに追加します。

    CertMgr.exe /add CertificateFileName.cer /s /r localMachine root
    

    次の CertMgr コマンドは、証明書ファイル CertificateFileName.cer の証明書をテスト コンピューターの信頼できる発行元証明機関の証明書ストアに追加します。

    CertMgr.exe /add CertificateFileName.cer /s /r localMachine trustedpublisher
    

    (CertMgrからの抜粋) 。

    /add 証明書

    指定した証明書ファイル内の証明書を証明書ストアに追加します。

    /s

    証明書ストアがシステム ストアであることを指定します。

    /r RegistryLocation

    システム ストアのレジストリの場所が HKEY_LOCAL_MACHINE 下にあることを指定します。

    CertificateStore

    [localMachine root] の場合と同様に、証明書ストア trustedpublisher を指定します。

    コンピューターを再起動します。 これで、Certmgr.msc を実行し、上記の 2 つの場所に ContosoTest.cer が表示されていることを確認できます。 表示されない場合は、証明書をインストールする別の方法として、証明書を開いて上記の 2 つのノードにインストールし、もう一度確認します。

  3. cat ファイルと sys ファイルの署名を確認します。 管理者特権のコマンド ウィンドウを開き、コンピューターで signtool.exe が使用できる場合は、cat、inf、sys ファイルがあるドライバー パッケージ ディレクトリに移動します。 適切なディレクトリで次のコマンドを実行します。

    カタログファイルの SPC 署名の検証から。

    signtool  verify  /v  /kp  /c  tstamd64.cat  toaster.inf
    

    埋め込み証明をチェックするには、次のコマンドを実行します。

    「リリース署名されたドライバー ファイルの 署名の検証」から。

    signtool  verify  /v  /kp  toaster.sys
    

    上記の 2 つのコマンドでは、テスト署名され、証明書が信頼された証明書ではなかったため、1 つのエラーが生成されます。

    SignTool Error: A certificate chain processed, but terminated in a root certificate which is not trusted by the trust provider.
    

    上記の 2 つの検証コマンドは、後で説明するリリース署名に非常に役立ちます。

    これで、ドライバーをテスト コンピューターにインストールしてテストする準備ができました。 インストール プロセス中に ( Windows Vista 以降のオペレーティング システムの場合) setupapi.dev.log ファイルに詳細ログを収集するには、次のレジストリ キーを正しく設定することをお勧めします。

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup\Loglevel=0x4800FFFF

    ドライバーをインストールする前に、%SystemRoot%\inf ファイルで、setupapi.dev.log ファイルの名前を変更します。 インストール後、新しいログ setupapi.dev.log ファイルが作成されます。このファイルには、インストール中に発生した重要な情報が含まれます。

    ドライバーが正常にインストールされたら、開発用コンピューターまたはテスト コンピューターでテストできます。

テスト署名されたドライバー パッケージのインストール、アンインストール、読み込み

手順 2 でシステムが再起動した後、テスト署名されたドライバー パッケージをインストールして読み込むことができます。 ドライバーをインストールするには、2 つの方法があります。

  1. OS 提供 の Pnputil ( pnputil.exe ) ツールを使用。

  2. ドライバーをインストールするための WDK コマンド ライン ツールであり、再頒布可能ではない Devcon ( devcon.exe ) ツールを使用。 Devcon ツールのサンプル コードは WDK で提供されています。 再配布するには、サンプル コードから独自の Devcon ツールを実装し、そのバージョンのツールを再配布できます。

PnpUtil を使用してドライバー パッケージをインストールしてアンインストールするには

ドライバー パッケージのインストール。

  1. 管理者特権のコマンド ウィンドウを開き、既定のディレクトリを c:\toaster に設定します。

  2. 次のいずれかのコマンドを実行します。

    • ドライバー パッケージをステージングするには。 pnputil /add-driver toaster.inf

    • ドライバーをステージングし、既存のデバイスにインストールするには。 pnputil /add-driver toaster.inf /install

ドライバー パッケージのアンインストール。

  1. 昇格コマンド ウィンドウを開きます。

  2. 返される一覧から削除するドライバー パッケージに対応する OEM INF の名前を指定します。 pnputil /enum-drivers

  3. pnputil /delete-driver \<OEM INF name> /uninstall を実行します。

DevCon を使用してドライバー パッケージをインストールしてアンインストールするには

ドライバー パッケージのインストール。

  1. 管理者特権のコマンド ウィンドウを開き、既定のディレクトリを c:\toaster に設定します。

  2. Devcon.exeは、WDK ツール ディレクトリに x86 バージョン、amd64 バージョン、および ia64 バージョンで提供されます。 関連するバージョンを c:\toaster ディレクトリにコピーし、次のコマンドを実行します。

    devcon.exe update <inf> <hwid>
    

    <hwid> を囲む引用符を使用することをお勧めします。 トースターのサンプルの場合は、次のようになります。

    devcon.exe update c:\toaster\toaster.inf "{b85b7c50-6a01-11d2-b841-00c04fad5171}\MsToaster"
    

ドライバー パッケージのアンインストール。

ドライバー パッケージは、デバイスがまだ使用している間、システムから削除しないでください。 ドライバー パッケージを削除するためにデバイスを削除する必要がある場合は、[削除] スイッチを使用するDevcon ツールを使用してデバイスを削除できます。 devcon.exe /? このツールのすべてのスイッチを表示します。 スイッチの使用に関する具体的な情報を取得するには、次に示すように、[削除] スイッチに [ヘルプ] を追加する必要があります。

devcon.exe help remove

デバイスを削除した後、ドライバーを削除するには、2 つのコマンドが必要です。 最初のコマンドと { dp_enum ] スイッチを使用して、コンピューターにインストールされているドライバー パッケージに対応するドライバー inf ファイル名を見つけます。

devcon dp_enum

このコマンドは、ドライバー パッケージに対応するすべての oemNnn.inf ファイルの一覧を表示します。ここで、Nnn はクラス情報を含む 10 進数で、次に示すように情報を提供します。

oem39.inf
    Provider: Intel
    Class: Network adapters
oem4.inf
    Provider: Dell
    Class: ControlVault Device

DriverStore から対応するドライバー パッケージを削除するには、Intel [ネットワーク アダプター] ドライバーに次に示す次のコマンドを使用します。

devcon.exe dp_delete oem39.inf

テスト署名されたドライバーが正しく動作していることを確認する

Toastpkg が正しく動作していることを確認するには。

  1. デバイス マネージャーを開始します。

  2. デバイスの一覧からトースターを選択します。 例については、次のスクリーンショットを参照してください。

    screen shot showing the toaster device in the device manager.

  3. ドライバーの [プロパティ] ダイアログ ボックスを開くには、[トースター パッケージ のサンプル トースター] をダブルクリックし、[プロパティ] を選択します。

  4. トースターが正常に動作していることを確認するには、[全般] タブの [デバイスの状態] ボックスをチェックします。

デバイス マネージャーを使用して、[プロパティ] ダイアログ ボックスからデバイスとドライバーをアンインストールできます。

テスト署名されたドライバーのトラブルシューティング方法

これらの手順で問題が発生した場合、「ドライバー署名インストールのトラブルシューティング」を参照してください。