一般リリースのためのカーネル ドライバーへの構成証明署名

このトピックでは、構成証明署名を使ってドライバーに署名する方法について説明します。

Windows デバイスのインストールでは、デジタル署名を使用して、ドライバー パッケージの整合性を確認し、ドライバー パッケージを提供したソフトウェア発行元の ID を確認します。 Windows 10 デスクトップ以降のシステムでは、HLK テストを必要としない構成証明署名用のドライバーを送信できます。 ただし、構成証明署名は、Windows 10 デスクトップ以降のバージョンの Windows でのみ動作します。 Windows Server 2016、Windows 8、Windows 7 などのその他のバージョンのWindows では、構成証明署名ドライバーは機能しません。 構成証明署名は、Windows 10 デスクトップのカーネル モード ドライバーとユーザー モード ドライバーをサポートしています。 Windows 10 では、ユーザー モード ドライバーは Microsoft による署名を必要としませんが、ユーザー モード ドライバーとカーネル モード ドライバーの両方で同じ構成証明プロセスを使うことができます。 以前のバージョンの Windows で実行する必要があるドライバーの場合は、Windows 認定の HLK/HCK テスト ログを送信する必要があります。

構成証明署名には次の特徴があります。

  • 構成証明署名では、Windows 10 カーネル モード ドライバーとユーザー モード ドライバーがサポートされています。 Windows 10 では、ユーザー モード ドライバーは Microsoft による署名を必要としませんが、ユーザー モード ドライバーとカーネル モード ドライバーの両方で同じ構成証明プロセスを使うことができます。
  • 構成証明署名は、ELAM または Windows Hello PE バイナリについて、適切な PE レベルを返しません。 これらは、追加の署名属性を受け取るために、テストして .hlkx パッケージとして提出する必要があります。
  • 構成証明署名では、EV 証明書を使ってパートナー センター (ハードウェア デベロッパー センター ダッシュボード) でドライバーを申請する必要があります。
  • 構成証明署名されたドライバーは、Windows 10 で動作します。 Windows 8.1 や Windows 7 など、より古いバージョンの Windows では動作せず、Windows Server 2016 以降ではサポートされていません。
  • 構成証明署名を行うには、ドライバー フォルダー名に特殊文字や UNC ファイル共有パスを使用せず、 40 文字未満のフォルダー名にする必要があります。
  • ドライバーの構成証明署名を受けても、Windows 認定を取得したわけではありません。 Microsoft からの構成証明署名は、ドライバーが Windows によって信頼できることを示していますが、HLK Studio でドライバーがテストされていないため、互換性や機能などに対する保証はありません。
  • お使いのドライバーの Windows 認定を取得するには、HLK Studio によって生成された hlkx パッケージをパートナー センターに送信します。
  • ドライバーの構成証明の署名を受けるには、CAB ファイルを送信します。

カーネル モード ドライバーへの構成証明署名

カーネル モード ドライバーに構成証明署名するには、次の手順を実行します。

  1. EV コード署名証明書を取得する (これは手順 2 の要件です。)
  2. パートナー センターに会社を登録する
  3. Windows Driver Kit をダウンロードしてインストールする
  4. CAB ファイル提出を作成する
  5. EV 証明書を使って CAB ファイル申請に署名する
  6. パートナー センターを使って、EV 署名された CAB ファイルを提出する
  7. ドライバーが正しく署名されていることを検証する
  8. デスクトップ用 Windows 10 でドライバーをテストする

EV コード署名証明書を取得する

署名対象のバイナリをダッシュボードに提出する前に、デジタル情報を保護するための拡張検証 (EV) コード署名証明書を取得する必要があります。 EV 証明書は、提出するコードに対する会社の所有権を確立するための公認されている標準です。

コード署名証明書の取得」の手順に従って EV 証明書を設定します。

許容される PE 署名とバイナリ

次の PE レベルとバイナリは、構成証明を介して処理できます。

  • PeTrust
  • DrmLevel
  • HAL
  • .exe
  • .cab
  • .dll
  • .ocx
  • .msi
  • .xpi
  • .xap

パートナー センター サービスに会社を登録する

パートナー センターでドライバーに署名するには、まず組織を登録し、コード署名証明書を取得する必要があります。

ハードウェア プログラムの登録」に記載されているプロセスに従って、ハードウェア ダッシュボードで使用するアカウントをセットアップします。

Windows Driver Kit をダウンロードしてインストールする

ドライバーのバイナリ ファイルへの署名に使うツールにアクセスするために、Windows Driver Kit (WDK) をダウンロードしてインストールする必要があります。

Windows 10 用のキットとツールのダウンロード」で説明されているプロセスに従って、WDK をダウンロードしインストールしてください。

CAB ファイル提出を作成する

ダッシュボードで申請できる CAB ファイルを作成するには、次の手順を実行します。

  1. 署名のために提出するバイナリを 1 つのディレクトリにまとめます。 この例では、C:\Echo を使います。 ここで説明する手順では、GitHub で入手可能な Echo ドライバー サンプルを参照します。

    一般的な CAB ファイル申請には、以下のものが含まれます。

    • ドライバー自体 (Echo.sys など)。
    • ドライバー INF ファイル。署名プロセスを容易に実行するために、ダッシュボードで使われます。
    • シンボル ファイル。デバッグ情報用に使用されます。 たとえば、Echo.pdb などです。
    • カタログ .CAT ファイルは必須で、会社の検証用にのみ使用されます。 Microsoft では、カタログ ファイルを再生成し、提出されたカタログ ファイルを置き換えます。

    注意

    CAB ファイル内の各ドライバー フォルダーは、同じアーキテクチャのセットをサポートする必要があります。 たとえば、これらが x86 または x64 をサポートしているか、x86 と x64 の両方をサポートしている必要があります。

    ドライバーの場所を参照する際には、UNC ファイル共有パス (\\server\share) は使わないでください。 CAB を検証するには、マップ済みのドライブ文字を使用する必要があります。

  2. MakeCab.exe を使って DDF ファイルを処理し、CAB ファイルを作成します。

    管理者としてコマンド プロンプト ウィンドウを開きます。 MakeCab /? コマンドを入力し、MakeCab のオプションを表示します。

    C:\Echo> MakeCab /?
    Cabinet Maker - Lossless Data Compression Tool
    
    MAKECAB [/V[n]] [/D var=value ...] [/L dir] source [destination]
    MAKECAB [/V[n]] [/D var=value ...] /F directive_file [...]
    
    source         File to compress.
    destination    File name to give compressed file.  If omitted, the
                   last character of the source file name is replaced
                   with an underscore (_) and used as the destination.
    /F directives  A file with MakeCAB directives (may be repeated). Refer to
                   Microsoft Cabinet SDK for information on directive_file.
    /D var=value   Defines variable with specified value.
    /L dir         Location to place destination (default is current directory).
    /V[n]          Verbosity level (1..3).
    
  3. CAB ファイルの DDF 入力ファイルを準備します。 ここで使う Echo ドライバーの場合は、次のようになります。

    ;*** Echo.ddf example
    ;
    .OPTION EXPLICIT     ; Generate errors
    .Set CabinetFileCountThreshold=0
    .Set FolderFileCountThreshold=0
    .Set FolderSizeThreshold=0
    .Set MaxCabinetSize=0
    .Set MaxDiskFileCount=0
    .Set MaxDiskSize=0
    .Set CompressionType=MSZIP
    .Set Cabinet=on
    .Set Compress=on
    ;Specify file name for new cab file
    .Set CabinetNameTemplate=Echo.cab
    ; Specify the subdirectory for the files.  
    ; Your cab file should not have files at the root level,
    ; and each driver package must be in a separate subfolder.
    .Set DestinationDir=Echo
    ;Specify files to be included in cab file
    C:\Echo\Echo.Inf
    C:\Echo\Echo.Sys
    
  4. makecab ユーティリティを呼び出し、/f オプションを使って DDF ファイルを入力として指定します。

    C:\Echo> MakeCab /f "C:\Echo\Echo.ddf
    

    makecab の出力には、例 2 で作成したキャビネット ファイル内のファイルの数が表示されます。

    C:\Echo> MakeCab /f Echo.ddf
    Cabinet Maker - Lossless Data Compression Tool
    
    17,682 bytes in 2 files
    Total files:              2
    Bytes before:        17,682
    Bytes after:          7,374
    After/Before:            41.70% compression
    Time:                     0.20 seconds ( 0 hr  0 min  0.20 sec)
    Throughput:              86.77 Kb/second
    
  5. Disk1 サブディレクトリにある CAB ファイルを探します。 エクスプローラーで CAB ファイルを選択すると、必要なファイルが含まれているかどうかを確認できます。

EV 証明書を使って申請の CAB ファイルに署名する

  1. EV 証明書プロバイダーで推奨されるプロセスに従い、EV 証明書を使って CAB ファイルに署名します。たとえば、SHA256 Certificate/Digest Algorithm/Timestamp を使用して .CAB に署名するには、次のようにします

    C:\Echo> SignTool sign /ac "C:\MyEVCert.cer" /s MY /n "Company Name" /fd sha256 /tr http://sha256timestamp.ws.symantec.com/sha256/timestamp /td sha256 /v "C:\Echo\Disk1\Echo.cab"
    

    重要

    業界のベスト プラクティスに従って、EV コード署名プロセスのセキュリティを管理します。

パートナー センターを使って、EV 署名された CAB ファイルを提出する

  1. パートナー センターを使って、EV 署名された CAB ファイルを提出します。 詳しくは、「ドライバーの署名のプロパティ」をご覧ください。

    • 構成証明の申請プロセスの一環として、以下で強調表示されているどの [テスト署名] ボックスもオンにしないでください。 これらはオフのままにしておきます。

    • 次のスクリーン ショットは、署名用に Echo ドライバーを提出するためのオプションを示しています。 A screenshot showing the options for submitting the echo driver for signing.

  2. 署名プロセスが完了したら、ハードウェア ダッシュボードから署名されたドライバーをダウンロードします。

ドライバーが正しく署名されていることを検証する

次の手順を実行して、ドライバーに正しく署名されていることを確認します。

  1. 申請ファイルをダウンロードした後で、ドライバー ファイルを抽出します。

  2. 管理者としてコマンド プロンプト ウィンドウを開きます。 次のコマンドを入力して、ドライバーが適切に署名されていることを確認します。

    C:\Echo> SignTool verify Echo.Sys
    
  3. 追加の情報を表示し、Signtool で複数の署名に基づいてファイル内のすべての署名を確認するには、次のように入力します。

     C:\Echo> SignTool verify /pa /ph /v /d Echo.Sys
    
  4. ドライバーの EKU を確認するには、次の手順を実行します。

    1. エクスプローラーを開き、バイナリ ファイルを探します。 そのファイルを長押し (または右クリック) し、 [プロパティ] を選びます。

    2. [デジタル署名] タブの [署名の一覧] で、示されている項目を選びます。

    3. [詳細] ボタンを選び、 [証明書の表示] を選びます。

    4. [詳細] タブで、 [拡張キー使用法] フィールドを選びます。

ダッシュ ボードでドライバーが再署名される場合は、次のプロセスが実行されます。

  • Microsoft SHA2 埋め込み署名を追加します。
  • ドライバーのバイナリが顧客によって独自の証明書を使って埋め込み署名されている場合、それらの署名は上書きされません。
  • 新しいカタログ ファイルを作成し、SHA2 Microsoft 証明書を使って署名します。 顧客が提供した既存のカタログは、このカタログに置き換えられます。

Windows 10 でドライバーをテストする

次の手順に従って、サンプル ドライバーをインストールします。

  1. デバイス マネージャーを開き、コンピューター アイコンを長押し (または右クリック) して、[レガシ ハードウェアの追加] を選びます。 指示に従ってドライバーのインストールを完了します。

  2. または、管理者としてコマンド プロンプト ウィンドウを開き、devcon を使ってドライバーをインストールします。 ドライバー パッケージのフォルダーに移動し、次のコマンドを入力します。

    C:\Echo> devcon install echo.inf root\ECHO
    
  3. ドライバーのインストール プロセスで、"ドライバー ソフトウェアの発行元を検証できません" という Windows のセキュリティ ダイアログ ボックスが表示されないことを確認します。

複数のドライバーで申請を作成する

一度に複数のドライバーを提出するには、次に示すようにドライバーごとにサブディレクトリを作成します。

A diagram showing an example driver signing directory structure.

サブディレクトリを参照する CAB ファイルの DDF 入力ファイルを準備します。 次のようになります。

;*** Submission.ddf multiple driver example
;
.OPTION EXPLICIT     ; Generate errors
.Set CabinetFileCountThreshold=0
.Set FolderFileCountThreshold=0
.Set FolderSizeThreshold=0
.Set MaxCabinetSize=0
.Set MaxDiskFileCount=0
.Set MaxDiskSize=0
.Set CompressionType=MSZIP
.Set Cabinet=on
.Set Compress=on
;Specify file name for new cab file
.Set CabinetNameTemplate=Echo.cab
;Specify files to be included in cab file
; First Driver
.Set DestinationDir=DriverPackage1
C:\DriverFiles\DriverPackage1\Driver1.sys
C:\DriverFiles\DriverPackage1\Driver1.inf
; Second driver
.Set DestinationDir=DriverPackage2
C:\DriverFiles\DriverPackage2\Driver2.sys
C:\DriverFiles\DriverPackage2\Driver2.inf

この手順に従い、申請する他のドライバー ファイルの署名、提出、テストも行うことができます。

関連項目