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

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

备注

证明签名具有下列属性。

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

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

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

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

获取 EV 代码签名证书

在可以向要进行签名的仪表板提交二进制文件前,需要获取扩展验证 (EV) 代码签名证书,才能确保数字信息安全。 EV 证书是用于建立你所提交代码的所有权的接受标准。 它让你可以用数字形式签署 PE 二进制文件,例如:

  • .exe
  • .cab
  • .dll
  • .ocx
  • .msi
  • .xpi
  • .xap

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

若要通过硬件仪表板对你的驱动程序签名,首先需要注册自己的组织并获取代码签名证书。

请按照注册硬件计划中所述过程设置将用于硬件仪表板的帐户。

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

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

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

创建 CAB 文件提交

若要创建可提交至仪表板的 CAB 文件提交,请完成以下步骤:

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

典型的 CAB 文件提交包含以下内容:

  • 驱动程序本身,例如 Echo.sys
  • 仪表板用来促进签名过程的驱动程序 INF 文件。
  • 符号文件用于调试信息。 例如,Echo.pdb。
  • 不需要目录 .CAT 文件。 Microsoft 会重新生成目录文件,并替换已提交的任何目录文件。

备注

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

  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
  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 代码签名过程的安全性。

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

  1. 使用硬件开发人员中心提交 EV 签名的 CAB 文件。 有关详细信息,请参阅驱动程序签署属性

    • 在提交过程中,必须指定是否提交通用驱动程序

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

  2. 签名过程完成后,请从硬件仪表板下载已签名的驱动程序。

验证驱动程序是否已正确签名

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

  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

你可以按照以下步骤登录、提交并测试你想要提交的其他驱动程序文件。