テスト署名を完了し、ドライバーがリリースの準備ができていることを確認したら、ドライバー パッケージをリリース署名する必要があります。 ドライバー パッケージをリリース署名するには 2 つの方法があります。
リリース署名は、Windows に読み込まれるカーネル モードまたはユーザー モードのバイナリ (.sys ファイル、.dll ファイルなど) の発行元を識別します。
カーネル モード バイナリは、次のいずれかを通じてリリース署名されます。
ドライバー パッケージにリリース署名する場合は、Windows Hardware Quality Lab (WHQL) を使用します。 WHQL リリース署名は、Windows 認定プログラムを通じて取得されます。 Windows 認定プログラムの開始から終了までの 5 ステップについては、「Windows ハードウェア互換性プログラムの認定プロセス」を参照してください。 ご不明な点については、パートナー センター ダッシュボードのテクニカル サポートにお問い合わせください。
WHQL プログラムを使用する代わりに、ドライバー の開発者やベンダーがドライバー パッケージをリリース署名できます。 リリース署名は、ソフトウェア 発行元証明書 (SPC) を使用して作成されます。 SPC は、Microsoft 認定の証明機関 (CA) から取得できます。 このタイプの SPC で生成された署名は、Windows の PnP ドライバー署名要件にも準拠しています。
次に、2 番目の方法のドライバー パッケージの署名をリリースするために必要な手順をご紹介します。
ソフトウェア発行元証明書(SPC)の取得
リリース署名には、商用 CA のソフトウェア発行元証明書 (SPC) とも呼ばれるコード署名証明書が必要です。
商用の Microsoft 認定証明機関 (CA) の一覧については、「カーネル モードのコード署名のクロス証明書」を参照してください。 一覧表示されている CA ベンダーは、ドライバー パッケージの署名をリリースするためのソフトウェア発行元証明書 (SPC) を提供するために使用する必要があります。
SPC を取得し、署名コンピューターに秘密キーをインストールする方法については、CA の手順に従います。 SPC は、ドライバー パッケージの署名のために使用されているドライバー ベンダー独自のツールです。 SPC、秘密キー、およびパスワードは、要求元のベンダー以外に共有しないでください。
クロス証明書
ソフトウェア発行元証明書からの抜粋:
SPC を取得するだけでなく、Microsoft によって発行されたクロス証明書を取得する必要があります。 クロス証明書は、SPC を発行した CA が信頼されたルート機関であることを確認するために使用されます。 クロス証明書は、CA によって発行された X.509 証明書で、別の CA のルート証明書の公開キーに署名するものです。 クロス証明書を使用すると、システムは信頼された Microsoft ルート機関を 1 つ持つことができるだけでなく、SPC を発行する商用証明機関 (CA) に信頼チェーンを拡張する柔軟性も生まれます。
発行元は、ドライバー パッケージを使用してクロス証明書を配布する必要はありません。 クロス証明書は、ドライバー パッケージのカタログ ファイルのデジタル署名や、ドライバー ファイルに埋め込まれる署名に含まれています。 ドライバー パッケージをインストールするユーザーは、クロス証明書の使用によって発生する追加の構成手順を実行する必要はありません。
「カーネル モードのコード署名のクロス証明書」からの抜粋:
クロス証明書は、単一の証明機関 (CA) によって発行されたデジタル証明書で、別の証明機関のルート証明書の公開キーに署名するために使用されます。 クロス証明書は、信頼された単一のルート CA から他の複数の CA への信頼チェーンを作成する手段を提供します。
Windows では、クロス証明書:
- オペレーティング システムカーネルに信頼された Microsoft ルート機関を 1 つ許可します。
- ソフトウェア 発行元証明書 (SPC) を発行する複数の商用 CA に信頼チェーンを拡張します。これは、Windows での配布、インストール、読み込み用のコード署名ソフトウェアに使用されます。
ここで提供されているクロス証明書は、カーネル モード ソフトウェアに適切に署名するために、Windows Driver Kit (WDK) コード署名ツールと共に使用されます。 カーネル モード ソフトウェアのデジタル署名は、Windows 用に公開されているあらゆるソフトウェアのコード署名と同様です。 開発者またはソフトウェア発行元は、カーネル モード ソフトウェアに署名するときに、デジタル署名にクロス証明書を追加します。 コード署名ツールは、バイナリ ファイルまたはカタログのデジタル署名にクロス証明書を追加します。
正しいクロス証明書の選択
Microsoft は、コード署名カーネル モード コードの SPC を発行する CA ごとに特定のクロス証明書を提供します。 クロス証明書の詳細については、「カーネル モード コード署名のクロス証明書」を参照してください。 この記事には、Microsoft が承認した CA ベンダーの名前と、SPC を発行したルート機関の正しいクロス証明書の一覧が示されています。 CA ベンダーによって発行された SPC の正しいクロス証明書を見つけて、リリース署名に使用している署名コンピューターにクロス証明書をダウンロードし、ドライバー ディレクトリに保存してください。 署名コマンドで証明書を使用する場合は、この証明書への絶対パスを指定してください。
個人用証明書ストアへの SPC 情報のインストール
ソフトウェア発行元証明書からの抜粋。
SPC を使用してカーネル モード コード署名ポリシーに準拠した方法でドライバーに署名するには、まず証明書情報を Personal Information Exchange (.pfx) ファイルに含める必要があります。 .pfx ファイルに含まれる情報は、ドライバーに署名するローカル コンピューターの個人用証明書ストアに追加する必要があります。
CA は、必要な証明書情報を含む .pfx ファイルを発行する場合があります。 その場合は、個人用証明書ストアへの .pfx ファイルのインストールに関するページで 説明されている手順に従って、個人用証明書ストアに pfx ファイルを追加します。
ただし、CA は次のファイルのペアを発行する場合があります。
- 秘密キーの情報を含む pvk ファイル。
- 公開キー情報を含む .spc または .cer ファイル。
この場合、個人証明書ストアに証明書情報を追加するには、ファイルのペア (.pvk と .spc、または .pvk と .cer) を .pfx ファイルに変換する必要があります。
CA が発行した2つのファイルから .pfx ファイルを作成するには、以下の手順に従ってください。
.pvk ファイルと .spc ファイルを .pfx ファイルに変換するには、コマンド プロンプトで次の Pvk2Pfx コマンドを使用します。
Pvk2Pfx -pvk mypvkfile.pvk -pi mypvkpassword -spc myspcfile.spc -pfx mypfxfile.pfx -po pfxpassword -f
.pvk ファイルと .cer ファイルを .pfx ファイルに変換するには、コマンド プロンプトで次の Pvk2Pfx コマンドを使用します。
Pvk2Pfx -pvk mypvkfile.pvk -pi mypvkpassword -spc mycerfile.cer -pfx mypfxfile.pfx -po pfxpassword -f
次に、Pvk2Pfx コマンドで使用される パラメーターについて説明します。
- -pvkmypvkfile.pvk パラメーターは .pvk ファイルを指定します。
- -pimypvkpassword オプションは、.pvk ファイルのパスワードを指定します。
- -spcmyspcfile.spc パラメーターは、.spc ファイルを指定するか、-spcmycerfile.cer パラメーターで .cer ファイルを指定します。
- -pfxmypfxfile.pfx オプションは、.pfx ファイルの名前を指定します。
- -popfxpassword オプションは、.pfx ファイルのパスワードを指定します。
- -f オプションは、既存の .pfx ファイルが存在する場合に置き換える Pvk2Pfx を構成します。
重要
pvk ファイルと pfx ファイルは、強力なパスワードで保護する必要があります。
個人用証明書ストアへの .pfx ファイルのインストール
カーネル モード ドライバーに署名するには、.pfx ファイルに格納されている証明書とキーをローカルの個人用証明書ストアにインポートする必要があります。 Signtool では、カーネル モード ドライバーに署名するための .pfx ファイルの使用はサポートされていません。 この制限は、.pfx ファイルの証明書を使用しているときに、署名にクロス証明書を追加する際の競合が原因です
ソフトウェア発行元証明書からの抜粋:
CA から .pfx ファイルを入手するか、.pvk と .spc または .cer ファイルから .pfx ファイルを作成した後、.pfxファイルの情報を、ドライバに署名するローカル コンピュータの個人証明書ストアに追加します。 次のように、証明書のインポート ウィザードを使用して、.pfx ファイル内の情報を個人用証明書ストアにインポートできます。
- 証明書のインポート ウィザードを開くには、Windows エクスプローラーで .pfx ファイルを見つけてダブルクリックします。
- コード署名証明書を個人証明書ストアにインポートするには、証明書インポート ウィザードの手順に従います。
「証明書ストアへの SPC のインポート」からの抜粋:
.pfx ファイルをローカルの個人証明書ストアにインポートする別の方法として、CertUtil コマンドライン ユーティリティを使用することもできます。 次のコマンド ラインの例では、CertUtil を使用して abc.pfx ファイルを Personal 証明書ストアにインポートします。
certutil -user -p pfxpassword -importPFX abc.pfx
ここで:
- -user オプションは、"現在のユーザー" 個人用ストアを指定します。
- -po オプションは、 .pfx ファイル (pfxpassword) のパスワードを指定します。
- -importPFX オプションは、 .pfx ファイル (abc.pfx) の名前を指定します。
SPC プロパティを表示します
MMC 証明書スナップイン (certmgr.msc) を使用して、個人用証明書ストアの証明書を表示します。
- 証明書スナップイン certmgr.msc を起動します。
- スナップインの左側のペインで、[個人] 証明書ストア フォルダーを選択します。
- [証明書] フォルダーを選択し、リリース署名に使用する証明書をダブルクリックします。
- [証明書] ダイアログ ボックスの [詳細] タブで、フィールドの一覧から [サブジェクト] を選択すると、証明書のサブジェクト名が強調表示されます。 このサブジェクト名は、このセクションの例で Signtool の /n 引数と共に使用される名前です。
署名
「ドライバー パッケージのカタログ ファイルのリリース署名」に基づく:
次のコマンドを実行して、ドライバー パッケージに署名する cat ファイルに署名します。 /n コマンドでは、上記の手順 4 で [サブジェクト] の下に表示される証明書の名前 (CN= MyCompany Inc. など) を使用する必要があります。
signtool sign /v /ac MSCV-VSClass3.cer /s My /n "MyCompany Inc." /t http://timestamp.digicert.com toaster.cat
/ac FileName
署名ブロックに追加する別の証明書を含むファイルを指定します。 このファイルは、Microsoft のクロス証明書ダウンロード リンクから取得したクロス署名証明書 MSCV-VSClass3.cer です。 クロス証明書が現在のディレクトリにない場合は、完全パス名を使用します。 必須ではありませんが、cat ファイルへの署名中にクロス証明書を追加することをお勧めします。
/s StoreName
証明書を検索するときに開くストアを指定します。 このオプションを指定しない場合、個人用ストアが開きます。これは個人用証明書ストアです。
/n SubjectName
署名証明書の件名を指定します。 この値には、件名全体の部分文字列を指定できます。
/t URL
タイム スタンプ サーバーの URL を指定します。 このオプションが存在しない場合、署名されたファイルにはタイム スタンプが付きません。 タイム スタンプを使用すると、署名されたドライバー パッケージはメインSPC 署名証明書が他の理由で取り消されるまで無期限に有効になります。
すべての署名手順を正しく実行しないと、ドライバーに署名できません。 次のエラーが発生することがあります。
SignTool Error: No certificates were found that met all the given criteria
埋め込み署名
「埋め込みの署名を使用したドライバー バイナリのリリース署名」に基づく:
カーネル モード コード署名ポリシーは、カーネル モード ドライバーを読み込むかどうかを制御します。 64 ビット バージョンの Windows には、32 ビット バージョンの Windows より厳しい要件があります。
カーネル モードのブート開始ドライバーには、ソフトウェア 発行元証明書 (SPC) 署名が埋め込まれている必要があります。 この要件は、すべての PnP または非 PnP カーネル モード ブート開始ドライバーに適用されます。 また、32 ビット バージョンの Windows にも適用されます。 ブート開始ドライバーではない PnP カーネル モード ドライバーには、埋め込まれた SPC 署名、WHQL リリース署名を含むカタログ ファイル、または SPC 署名を含むカタログ ファイルが必要です。
詳細については、カーネル モードのコード署名の要件に関するページを参照してください。
toaster.sys ファイルに署名する埋め込みコマンド。
signtool sign /v /ac MSCV-VSClass3.cer /s my /n "MyCompany Inc. " /t http://timestamp.digicert.com toaster.sys
署名が完了したら、次のコマンドを実行して署名されたドライバーを確認します。
signtool verify /kp /v /c tstamd64.cat toastpkg.inf
コマンドの出力:
Verifying: toaster.inf
File is signed in catalog: toaster.cat
Hash of file (sha1): 580C2A24C3A9E12817E18ADF1C4FE9CF31B01EA3
Signing Certificate Chain:
Issued to: VeriSign Class 3 Public Primary Certification Authority - G5
Issued by: VeriSign Class 3 Public Primary Certification Authority - G5
Expires: Wed Jul 16 15:59:59 2036
SHA1 hash: 4EB6D578499B1CCF5F581EAD56BE3D9B6744A5E5
Issued to: VeriSign Class 3 Code Signing 2010 CA
Issued by: VeriSign Class 3 Public Primary Certification Authority - G5
Expires: Fri Feb 07 15:59:59 2020
SHA1 hash: 495847A93187CFB8C71F840CB7B41497AD95C64F
Issued to: Contoso, Inc
Issued by: VeriSign Class 3 Code Signing 2010 CA
Expires: Thu Dec 04 15:59:59 2014
SHA1 hash: EFC77FA6BA295580C2A2CD25B56C00606CA21269
The signature is timestamped: Mon Jan 27 14:48:55 2014
Timestamp Verified by:
Issued to: Thawte Timestamping CA
Issued by: Thawte Timestamping CA
Expires: Thu Dec 31 15:59:59 2020
SHA1 hash: BE36A4562FB2EE05DBB3D32323ADF445084ED656
Issued to: Symantec Time Stamping Services CA - G2
Issued by: Thawte Timestamping CA
Expires: Wed Dec 30 15:59:59 2020
SHA1 hash: 6C07453FFDDA08B83707C09B82FB3D15F35336B1
Issued to: Symantec Time Stamping Services Signer - G4
Issued by: Symantec Time Stamping Services CA - G2
Expires: Tue Dec 29 15:59:59 2020
SHA1 hash: 65439929B67973EB192D6FF243E6767ADF0834E4
Cross Certificate Chain:
Issued to: Microsoft Code Verification Root
Issued by: Microsoft Code Verification Root
Expires: Sat Nov 01 05:54:03 2025
SHA1 hash: 8FBE4D070EF8AB1BCCAF2A9D5CCAE7282A2C66B3
Issued to: VeriSign Class 3 Public Primary Certification Authority - G5
Issued by: Microsoft Code Verification Root
Expires: Mon Feb 22 11:35:17 2021
SHA1 hash: 57534CCC33914C41F70E2CBB2103A1DB18817D8B
Issued to: VeriSign Class 3 Code Signing 2010 CA
Issued by: VeriSign Class 3 Public Primary Certification Authority - G5
Expires: Fri Feb 07 15:59:59 2020
SHA1 hash: 495847A93187CFB8C71F840CB7B41497AD95C64F
Issued to: Contoso, Inc
Issued by: VeriSign Class 3 Code Signing 2010 CA
Expires: Thu Dec 04 15:59:59 2014
SHA1 hash: EFC77FA6BA295580C2A2CD25B56C00606CA21269
Successfully verified: toaster.inf
Number of files successfully Verified: 1
Number of warnings: 0
Number of errors: 0
証明書チェーンに Microsoft Code Verification Root が存在する点に注意してください。
次に、toaster.sys ファイルの埋め込み署名をチェックします。
signtool verify /v /kp toaster.sys
コマンドの出力:
Verifying: toaster.sys Hash of file (sha1): CCF5F5C02FEDE87D92FCB7B536DBF5D5EFDB7B41
Signing Certificate Chain:
Issued to: VeriSign Class 3 Public Primary Certification Authority - G5
Issued by: VeriSign Class 3 Public Primary Certification Authority - G5
Expires: Wed Jul 16 15:59:59 2036
SHA1 hash: 4EB6D578499B1CCF5F581EAD56BE3D9B6744A5E5
Issued to: VeriSign Class 3 Code Signing 2010 CA
Issued by: VeriSign Class 3 Public Primary Certification Authority - G5
Expires: Fri Feb 07 15:59:59 2020
SHA1 hash: 495847A93187CFB8C71F840CB7B41497AD95C64F
Issued to: Contoso, Inc
Issued by: VeriSign Class 3 Code Signing 2010 CA
Expires: Thu Dec 04 15:59:59 2014 SHA1 hash: EFC77FA6BA295580C2A2CD25B56C00606CA21269
The signature is timestamped: Mon Jan 27 14:48:55 2014 Timestamp Verified by:
Issued to: Thawte Timestamping CA Issued by: Thawte Timestamping CA Expires: Thu Dec 31 15:59:59 2020 SHA1 hash: BE36A4562FB2EE05DBB3D32323ADF445084ED656
Issued to: Symantec Time Stamping Services CA - G2 Issued by: Thawte Timestamping CA Expires: Wed Dec 30 15:59:59 2020 SHA1 hash: 6C07453FFDDA08B83707C09B82FB3D15F35336B1
Issued to: Symantec Time Stamping Services Signer - G4 Issued by: Symantec Time Stamping Services CA - G2 Expires: Tue Dec 29 15:59:59 2020 SHA1 hash: 65439929B67973EB192D6FF243E6767ADF0834E4
Cross Certificate Chain:
Issued to: Microsoft Code Verification Root Issued by: Microsoft Code Verification Root Expires: Sat Nov 01 05:54:03 2025 SHA1 hash: 8FBE4D070EF8AB1BCCAF2A9D5CCAE7282A2C66B3
Issued to: VeriSign Class 3 Public Primary Certification Authority - G5
Issued by: Microsoft Code Verification Root
Expires: Mon Feb 22 11:35:17 2021
SHA1 hash: 57534CCC33914C41F70E2CBB2103A1DB18817D8B
Issued to: VeriSign Class 3 Code Signing 2010 CA
Issued by: VeriSign Class 3 Public Primary Certification Authority - G5
Expires: Fri Feb 07 15:59:59 2020
SHA1 hash: 495847A93187CFB8C71F840CB7B41497AD95C64F
Issued to: Contoso, Inc Issued by: VeriSign Class 3 Code Signing 2010 CA Expires: Thu Dec 04 15:59:59 2014 SHA1 hash: EFC77FA6BA295580C2A2CD25B56C00606CA21269
Successfully verified: toaster.sys
Number of files successfully Verified: 1 Number of warnings: 0 Number of errors: 0
証明書チェーンに Microsoft Code Verification Root が存在する点に、再度注意してください。