ファイル システム ドライバにリリース署名する方法
最終更新日: 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 プレゼンテーションを参照してください。
開始する前に
システムを準備するには:
チュートリアルでは、下記の用語を使用します。
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 から始まります)。プレゼンテーションのスライドは、こちらからダウンロードできます。
ドライバ署名の一般的な説明については、カーネル モードのコード署名の手順を参照してください。