Share via


リリース署名

テスト署名を完了し、ドライバーがリリースの準備ができていることを確認したら、ドライバー パッケージをリリース署名する必要があります。 ドライバー パッケージのリリース署名には 2 つの方法があります。

リリース署名は、Windows Vista 以降のバージョンの Windows に読み込まれるカーネル モードまたはユーザー モードのバイナリ (.sys ファイルや.dll ファイルなど) の発行元を識別します。

カーネル モード バイナリは、次のいずれかを通じてリリース署名されます。

  1. Windows Hardware Quality Lab (WHQL は Winqual とも呼ばれます) を使用して、ドライバー パッケージのリリース署名を行います。 WHQL リリース署名は、Windows 認定プログラムを通じて取得されます。 以下のリンクでは、Windows 認定プログラムの開始から終了までの 5 つの手順について説明します。 このオプションの詳細については、「 Windows ハードウェア認定: ここから 開始する」を参照してください。 上記のリンクの手順に関する質問については、パートナー センター ダッシュボードのテクニカル サポートにお問い合 わせください。
  2. WHQL プログラムを使用する代わりに、ドライバー の開発者やベンダーがドライバー パッケージをリリース署名できます。 このプログラムは Vista OS リリースから開始されています。 リリース署名は、ソフトウェア 発行元証明書 (SPC) を使用して作成されます。 SPC は、Microsoft がそのような証明書を発行を許可したサード パーティの証明機関 (CA) から取得されます。 この種類の SPC で生成された署名は、Windows Vista 以降のバージョンの 64 ビットおよび 32 ビット バージョンの 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 を構成します。

[!IMPORTANY] 強力なパスワードで pvk ファイルと pfx ファイルを保護する必要があります。

個人用証明書ストアへの .pfx ファイルのインストール

カーネル モード ドライバーに署名するには、.pfx ファイルに格納されている証明書とキーをローカルの個人用証明書ストアにインポートする必要があります。 Signtool では、カーネル モード ドライバーに署名するための .pfx ファイルの使用はサポートされていません。 この制限は、.pfx ファイルの証明書を使用しているときに、署名にクロス証明書を追加する際の競合が原因です

ソフトウェア発行元証明書からの最終的な抜粋

CA から .pfx ファイルを入手するか、.pvk.spc または .cer ファイルから .pfx ファイルを作成した後、.pfxファイルの情報を、ドライバに署名するローカル コンピュータの個人証明書ストアに追加します。 次のように、証明書のインポート ウィザードを使用して、.pfx ファイル内の情報を個人用証明書ストアにインポートできます。

  1. Windows エクスプローラーで .pfx ファイルを探し、ファイルをダブルクリックして証明書のインポート ウィザードを開きます。

  2. 証明書のインポート ウィザードの手順に従って、コード署名証明書を個人用証明書ストアにインポートします。

証明書ストアへの SPC のインポートからの抜粋

Windows Vista 以降では、 .pfx ファイルをローカルの Personal 証明書ストアにインポートする別の方法として、 CertUtil コマンド ライン ユーティリティを使用します。 次のコマンド ラインの例では、CertUtil を使用して abc.pfx ファイルを Personal 証明書ストアにインポートします。

certutil -user -p pfxpassword -importPFX abc.pfx

ここで:

  • -user オプションは、"現在のユーザー" 個人用ストアを指定します。

  • -po オプションは、 .pfx ファイル (pfxpassword) のパスワードを指定します。

  • -importPFX オプションは、 .pfx ファイル (abc.pfx) の名前を指定します。

SPC プロパティを表示します

MMC 証明書スナップイン (certmgr.msc) を使用して、個人用証明書ストアの証明書を表示します。

  1. 証明書スナップイン certmgr.msc を起動します。
  2. スナップインの左側のウィンドウで、[個人用証明書ストア] フォルダーを選択します。
  3. [証明書] フォルダーをクリックし、リリース署名に使用する証明書をダブルクリックします。
  4. [証明書] ダイアログ ボックスの [詳細] タブで、フィールドの一覧から [サブジェクト] を選択して、証明書のサブジェクト名を強調表示します。 これは、このセクションの例で 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

埋め込み署名

埋め込み署名を使用したドライバー バイナリのリリース署名に基づきます

Windows Vista 以降、カーネル モード コード署名ポリシーは、カーネル モード ドライバーを読み込むかどうかを制御します。 Windows Vista 以降の 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 が存在する点に、再度注意してください。