ファイル システム ドライバにリリース署名する方法

最終更新日: 2008年4月23日

Windows Server 2008 と Windows Vista の 64 ビット バージョン用のカーネル モード ドライバ バイナリには、署名する必要があります。未署名の場合、Windows はバイナリを読み込みません。この要件は、ミニフィルタ、レガシ フィルタ、リダイレクタなど、ファイル システム ドライバに適用されます。一部のドライバでは、ドライバ パッケージの署名されたカタログ ファイルを含むことにより、この要件を満たすことができます。ただし、ブート開始およびシステム開始のドライバ バイナリはすべて、システム ブートのパフォーマンスを向上させるため、埋め込み署名されている必要があります。

ファイル システム ドライバなど、プラグ アンド プレイ以外のドライバでは、署名されたカタログ ファイルは不要なので、署名の最も一般的なアプローチは、ドライバ バイナリに埋め込み署名することです。このドライバに関するヒントでは、埋め込みリリース署名プロセスの詳細なチュートリアルなど、ファイル システム ドライバの署名に関する基本情報を提供します。

チュートリアルは、Windows Driver Kit (WDK) の Minispy サンプルに基づいています。このサンプルは、WDK の minispy ディレクトリにあります。たとえば、WDK の Windows Server 2008 バージョンの場合、サンプルは通常、C:\WinDDK\6001\src\filesys\miniFilter\minispy にあります。

ファイル システムのドライバ署名に関する一般的な背景情報については、IFS の File System Driver Signing プレゼンテーションを参照してください。

開始する前に

システムを準備するには:

最新バージョンの WDK をインストールします。詳細については、WDK と WLK の入手方法を参照してください。

ソフトウェア発行証明書 (SPC) (別名: コード署名証明書) および関連付けられたクロス証明書を取得します。詳細については、Windows Vista のカーネル モードのコード署名用 Microsoft クロス証明書を参照してください。

チュートリアルでは、下記の用語を使用します。

用語説明

mySPCfile.spc

公開キー証明書ファイル。

myPVKfile.pvk

秘密キー証明書ファイル。

myPVKpassword

秘密キー証明書ファイルのパスワード。

myCrossCert.cer

SPC に対する適切なクロス証明書ファイル。

CN 値

SPC の CN 値 ([個人] 証明書ストア内)。

ヒント: このコンテンツからコマンド構文をコピーして貼り付けないでください。そうすると、コマンド ラインに誤った文字が含まれる可能性があります。

下記の手順では、WDK の Minispy サンプルを使用して、プロセスを示します。

Minispy ドライバへの署名

署名操作には、次のような 3 つの基本フェーズがあります。

1.

ドライバと証明書を準備する。

2.

ドライバに署名する。

3.

ドライバが正しくインストールされていることを確認する。

Minispy ドライバ サンプルと署名証明書を準備するには

1.

昇格した特権で、WDK ビルド環境のウィンドウを開きます。

: 署名ツールおよび署名は特定の Windows バージョンに依存しないので、任意の WDK ビルド環境ウィンドウを使用して、ドライバに署名できます。

2.

WDK ビルド ユーティリティを使用して、Minispy ドライバ サンプルをビルドします。詳細については、WDK ドキュメントのローカル インストール内の「Minispy Minifilter Sample」を参照してください。

3.

C:\MinispyPkg という名のフォルダを作成し、ドライバ パッケージ ファイル (minispy.exe、minispy.sys、および minispy.inf) を、プロジェクトのターゲット フォルダから MinispyPkg にコピーします。

4.

C:\MyCerts という名のフォルダを作成し、そのフォルダに mySPCfile.spc と myPVKfile.pvk をコピーします。

5.

C:\myCerts に移動し、下記のコマンドを実行して、.pvk ファイルと .spc ファイルを、システムで使用可能な .pfx ファイル (myPFXfile.pfx) に変換します。

pvk2pfx -pvk myPVKfile.pvk -pi myPVKpassword -spc mySPCfile.spc
   -pfx myPFXfile.pfx -f

6.

Certutil を使用し、下記のコマンドを実行して、現在のユーザーの [個人] 証明書ストアに myPFXfile.pfx をインストールします。

certutil -user -p myPVKpassword -importPFX IfsSPC.pfx

Certutil によって返された CN 値を忘れずに記録してください。また、.pfx ファイルをダブルクリックして証明書ウィザードを実行し、ウィザードの既定値を使用することにより、前のタスクを実行することもできます。

: Certutil は、Windows Vista や、Windows Server 2008 など大半の Windows サーバー オペレーティング システムに含まれています。Certutil は、Windows XP に含まれていませんが、別のコンピュータからこのツールをコピーするか、Windows Server 2003 SP1 Administration Tools Pack をインストールできます。Tools Pack の詳細については、Windows Server 2003 Administration Tools Pack を参照してください。

Minispy ドライバのバイナリ ファイルに埋め込み署名するには

1.

c:\minispyPkg に移動し、下記の Inf2Cat コマンドを実行して、ターゲット Windows バージョン用のドライバ パッケージの INF ファイルを検証します。

inf2cat /driver:C:\minispyPkg /os:Vista_X64

2.

c:\minispyPkg から下記の SignTool コマンドを実行して、ドライバのバイナリ ファイル (minispy.sys) に署名します。

signtool sign /v /ac c:\minispyPkg\myCrossCert.cer /s my /n "CN Value"
/t http://timestamp.verisign.com/scripts/timestamp.dll minispy.sys

: SPC の CN 値を記録していない場合、Microsoft 管理コンソール (MMC) 証明書プラグインから取得できます。プラグインを開くには、下記のコマンドを実行します。

mmc certmgr.msc

3.

下記の SignTool コマンドを実行して、署名を検証します。

Signtool verify /v /kp minispy.sys

このコマンドにより、証明書チェーンが表示されます。下記の例は、VeriSign コード署名証明書および Microsoft/VeriSign クロス証明書の証明書チェーンを示したものです。

証明書チェーン
クリックしてフル サイズの画像を表示

この例では、最上位の証明書は、インデントが最小のものである点に注意してください。

重要: Microsoft Code Verification Root が最上位の証明書でない場合、バイナリがクロス証明書で正常に署名されていません。

署名された Minispy ドライバが正しくインストールされていることを確認するには

1.

エクスプローラで [minispy.inf] ファイルを右クリックし、[インストール] をクリックして、64 ビット Windows Server 2008 または Windows Vista システムにドライバをインストールします。

2.

下記の fltmc コマンドを実行して、署名されたドライバを読み込みます。

fltmc load minispy

ドライバを読み込むのに使用された名前 (この例では minispy) が、ドライバの INF ファイルの ServiceName 値である点に注意してください。また、net start minispy コマンドまたは sc start minispy コマンドを実行して、ドライバを読み込むこともできます。

3.

次のように引数なしで fltmc を実行し、読み込まれたフィルタの一覧を表示して、署名されたドライバが正常に読み込まれたことを確認します。

fltmc

4.

下記のコマンドを実行して、署名されたドライバをアンロードおよびアンインストールします。

rundll32 setupapi,InstallHinfSection DefaultUninstall 132 C:\minispyPkg\minispy.inf

注: ドライバが正常にアンロードされアンインストールされたことを確認するため、fltmc を再び実行します。

Hardware Security Module を使用して署名する方法

秘密キーは貴重な資産であり、侵害に対して慎重にセキュリティで保護する必要があります。推奨の方法は、Hardware Security Module (HSM) 内に秘密キーを保つことです。これにより、HSM が使用されているコンピュータが危険にさらされた場合でも、秘密キーが侵害されるリスクが減ります。公開キーと秘密キーを管理する方法の詳細については、コード署名のベスト プラクティスを参照してください。

myPVKfile.pvk が HSM に格納されている場合、minispy.sys に署名するには、下記の SignTool コマンドを実行します。

signtool sign /v /ac c:\minispyPkg\myCrossCert.cer /s my /n "CN Value"
/csp "Cryptographic Service Provider Name" /kc "KeyContainerName"
/t http://timestamp.verisign.com/scripts/timestamp.dll minispy.sys

重要: 空白を含んでいるすべての名前は、二重引用符で囲む必要があります。

: HSM に秘密キーをインポートする手順は、暗号化サービス プロバイダ名やキー コンテナ名と同様に、メーカー固有です。

詳細情報:

コード署名のベスト プラクティス

WDK と WLK の入手方法

Windows Server 2003 Administration Tools Pack

Windows Vista のカーネル モードのコード署名用 Microsoft クロス証明書

上記の資料のビデオ プレゼンテーション (2008 年 1 月の IFS Plugfest 18 で記録) については、File System Driver Signing を参照してください (ディスカッションはインデックス 09:34 から始まります)。プレゼンテーションのスライドは、こちらからダウンロードできます。

ドライバ署名の一般的な説明については、カーネル モードのコード署名の手順を参照してください。



この情報はお役に立ちましたか?