对内核驱动程序进行证明签名以便公开发布

本主题介绍如何使用证明签名对驱动程序签名。

备注

证明签名具有下列属性。

  • 证明签名支持 Windows 10 桌面版内核模式和用户模式驱动程序。 尽管用户模式驱动程序无需由适用于 Windows 10 的 Microsoft 进行签名,但相同的证明过程可以同时用于用户和内核模式驱动程序。
  • 证明签名需要使用 EV 证书,才能将驱动程序提交到硬件开发人员中心 (Sysdev) 仪表板。
  • 证明签名的驱动程序仅适用于 Windows 10 桌面版。 它不适用于其他版本的 Windows(如 Windows Server 2016、Windows 8.1 或 Windows 7)。
  • 证明签名要求驱动程序文件夹名称不包含特殊字符,且长度小于 40 个字符。

对内核模式驱动程序进行证明签名

若要对内核模式驱动程序进行证明签名,请完成以下步骤:

  1. 获取 EV 代码签名证书
  2. 为你的公司注册硬件开发人员中心 (Sysdev)
  3. 下载并安装 Windows 驱动程序工具包
  4. 创建 CAB 文件提交
  5. 使用 EV 证书对 CAB 文件提交签名
  6. 使用硬件开发人员中心 (Sysdev) 仪表板提交 EV 签名的 Cab 文件
  7. 验证驱动程序是否已正确签名
  8. 在 Windows 10 桌面版上测试驱动程序

获取 EV 代码签名证书

在可以使用要进行签名的仪表板提交二进制文件前,需要获取扩展验证 (EV) 代码签名证书,才能确保数字信息安全。 此证书是用于建立你的公司对你所提交代码的所有权的接受标准。 它让你可以用数字形式签署 PE 二进制文件,例如 .exe、.cab、.dll、.ocx、.msi、.xpi 和 .xap 文件。

按照获取代码签名证书中描述的过程获取所需的 EV 代码签名证书。

为你的公司注册硬件开发人员中心 (Sysdev) 仪表板服务

可以使用传统 (Sysdev) 仪表板对你的驱动程序签名。 若要访问 Sysdev 仪表板,需要注册自己的公司并获取代码签名证书。

按照登录之前中描述的过程设置仪表板上所需的帐户。

下载并安装 Windows 驱动程序工具包

你将需要下载并安装 Windows 驱动程序工具包 (WDK),才能获得对用于签署二进制文件的工具的访问权限。

按照下载适用于 Windows 10 的工具包和工具中描述的过程下载并安装 WDK。

创建 CAB 文件提交

若要创建适用于仪表板的 CAB 文件提交,请完成以下步骤。

  1. 收集将在单个目录中提交以进行签名的二进制文件。 在此示例中,我们将使用 C:\Echo。 此处所述的步骤将在该位置引用 GitHub 中可用的回显驱动程序。

https://github.com/Microsoft/Windows-driver-samples/tree/master/general/echo/kmdf/driver/AutoSync

典型的 cab 文件提交包含以下内容。

  • 驱动程序本身,例如 Echo.sys
  • 仪表板用来促进签名过程的驱动程序 INF 文件。
  • 符号文件用于调试信息。 例如,Echo.pdb。
  • 不需要目录 .CAT 文件。 Microsoft 会重新生成目录文件,并替换已提交的任何目录文件。
  1. 使用 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).
  1. 准备 cab 文件 DDF 输入文件。 对于我们的回显驱动程序,它可能看起来如下所示。
;*** 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

注意CAB 中的所有驱动程序文件夹必须支持同一组体系结构,例如,所有驱动程序必须为 x86、所有驱动程序必须为 x64 或所有驱动程序必须同时支持 x86 和 x64。

  1. 调用 makecab 实用工具,并使用 /f 选项将 ddf 文件作为输入提供。
C:\Echo> MakeCab /f "C:\Echo\Echo.ddf

makecab 的输出应该显示示例 2 中创建的 Cabinet 中的文件数。

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
  1. 在 Disk1 子目录中找到 cab 文件。 可以在文件资源管理器中单击 cab 文件,以验证它是否包含预期的文件。

使用 EV 证书对提交 Cab 文件签名

  1. 使用 EV 证书提供商推荐的过程,通过 EV 证书对 cab 文件进行签名。例如,可以使用签名工具,如果使用的是 Verisign,还可以指定其时间戳服务器。
C:\Echo> SignTool sign /v /ac "C:\MyEVCert.cer" /s MY /n "Company Name" /t http://timestamp.verisign.com/scripts/timstamp.dll "C:\Echo\Disk1\Echo.cab"

注意 使用行业最佳做法管理 EV 证书签名过程的安全性。

使用硬件开发人员中心 (Sysdev) 仪表板提交 EV 签名的 Cab 文件

  1. 使用硬件开发人员中心 (Sysdev) 仪表板提交 EV 签名的 Cab 文件。有关详细信息,请参阅驱动程序签名属性文件签名服务

作为提交过程的一部分,你将指出提交中的所有驱动程序支持哪些体系结构。 使用复选框提供了三个选项。

  • x86
  • x64
  • x86 和 x64

CAB 中的所有驱动程序文件夹必须支持同一组体系结构,例如,所有驱动程序必须为 x86、所有驱动程序必须为 x64 或同时支持 x86 和 x64。 如果具有支持不同体系结构组合的驱动程序,请创建单独的提交。

还需要表明是否要提交通用驱动程序。 有关详细信息,请参阅通用 Windows 驱动程序入门

以下屏幕截图显示了用于提交回显驱动程序进行签名的选项。

显示用于提交回显驱动程序进行签名的选项的屏幕截图

  1. 签名过程完成后,请从 Sysdev 仪表板下载已签名的驱动程序。 ## 验证驱动程序是否已正确签名

完成以下步骤以验证驱动程序是否已正确签名

  1. 下载提交文件后,提取驱动程序文件。

  2. 以管理员身份打开命令提示符窗口。 然后,输入以下命令来验证驱动程序是否已按预期签名。

C:\Echo> SignTool verify Echo.Sys
  1. 若要列出附加信息,并使 signtool 验证包含多个签名的文件中的所有签名,请键入以下命令。
C:\Echo> SignTool verify /pa /ph /v /d Echo.Sys
  1. 若要确认驱动程序的 EKU,请完成以下步骤。 a. 打开 Windows 资源管理器并找到二进制文件。 右键单击该文件并选择属性。 b. 在数字签名选项卡上,选择“签名列表”中列出的项。 c. 选择详细信息按钮,然后选择查看证书。 d. 在详细信息选项卡上,选择增强型密钥用法字段。 当驱动程序由仪表板重新签名时,使用以下过程。
  • 附加 Microsoft SHA2 嵌入式签名。
  • 如果客户使用自己的证书对驱动程序二进制文件进行嵌入式签名,将不会覆盖这些签名。
  • 创建新的目录文件并使用 SHA2 Microsoft 证书对该目录文件签名。 该目录会替换客户提供的任何现有目录。

在 Windows 10 桌面版上测试驱动程序

使用以下说明安装示例驱动程序。

  1. 打开设备管理器、右键单击计算机图标,然后选择“添加过时硬件”。 按照提示完成驱动程序的安装。

  2. 或者,以管理员身份打开“命令提示符”窗口并使用 devcon 安装驱动程序。 导航到你的驱动程序包文件夹,然后输入以下命令。

C:\Echo> devcon install echo.inf root\ECHO
  1. 确认驱动程序安装过程不会显示“Windows 无法验证该驱动程序软件的发布者。” “Windows 安全”对话框。

创建多个驱动程序提交

若要同时提交多个驱动程序,请为每个驱动程序创建一个子目录,如下所示。

准备将引用子目录的 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

若要签名、提交和测试驱动程序文件,请按照上述步骤操作。

向 Microsoft 发送有关此主题的评论