认证签署 Windows 驱动程序

本文介绍如何使用验证签名对驱动程序进行签名。 有关证明签名的详细信息和要求,请参阅 Windows 10 证明签名驱动程序

重要

自 2023 年 3 月 1 日起,面向零售用户的证明签名驱动程序不再通过 Windows 更新发布。 在使用 CoDev测试注册表项/Surface SSRK 选项进行测试时,继续支持经过验证签名的驱动程序。

先决条件

创建 CAB 文件

以下过程使用 Echo 驱动程序示例 创建 CAB 文件提交,以演示这些步骤。

典型的 CAB 文件提交必须包含以下组件:

  • 驱动程序本身,例如 Echo.sys

  • 仪表板使用驱动程序 INF 文件(.inf)来简化签名过程。

  • 用于调试信息的符号文件,例如 Echo.pdb。 Microsoft自动崩溃分析工具需要 .pdb 文件。

  • 目录 .CAT 文件是必需的,仅用于公司验证。 Microsoft重新生成目录文件,并替换之前提交的任何目录文件。

注释

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

引用驱动程序位置时,请勿使用 UNC 文件共享路径。\server\share 必须使用映射的驱动器号才能使 CAB 有效。

若要创建 CAB 文件,请执行以下步骤:

  1. 收集需要签名的二进制文件到一个目录中。 此示例使用 C:\Echo 文件夹。

  2. 使用管理员权限打开命令提示符窗口。

  3. 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).
    
  4. 准备 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
    
  5. 输入以下命令以创建 CAB 文件:

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

    命令的 MakeCab 输出应显示创建的 CAB 文件中的文件数。 在这种情况下,应有两个文件。

    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
    
  6. 在子目录中找到 CAB 文件 Disk1 。 可以在文件资源管理器中选择 CAB 文件,以验证该文件是否包含预期文件。

使用 EV 证书对 CAB 文件进行签名

下一过程步骤是使用 EV 证书对 CAB 文件进行签名。

使用 EV 证书提供商推荐的过程。 例如,若要使用 SHA256 证书/摘要算法/时间戳对 CAB 文件进行签名,请输入以下命令:

C:\Echo> SignTool sign /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 文件

对 CAB 文件进行签名后,即可在合作伙伴中心提交该文件:

  1. 转到 合作伙伴中心硬件仪表板 并使用凭据登录。

  2. 选择 “提交新硬件

    硬件提交列表的屏幕截图。

  3. 在“包和签名属性”部分,输入驱动程序提交的产品名称。 此名称可用于搜索和整理驱动程序提交。

    注释

    与另一家公司共享驱动程序时,该名称可见。

  4. 取消选中这两个测试签名选项(未选中)。

  5. 对于 “请求签名 ”选项,选择要包含在驱动程序包中的签名:

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

  6. 选择页面底部的“提交”

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

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

使用以下步骤确认驱动程序已正确签名:

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

  2. 使用管理员权限打开命令提示符窗口。

  3. 输入以下命令以验证驱动程序是否已按预期进行签名:

    C:\Echo> SignTool verify Echo.Sys
    
  4. 若要列出其他信息并让 SignTool 验证包含多个签名的文件中的所有签名,请输入以下命令:

     C:\Echo> SignTool verify /pa /ph /v /d Echo.Sys
    
  5. 若要确认驱动程序的 EKU,请完成以下步骤:

    1. 打开 Windows 资源管理器并找到二进制文件。 右键单击该文件,然后选择“ 属性”。

    2. 在“ 数字签名 ”选项卡上,选择“签名”列表中的列出项。

    3. 选择 “详细信息”,然后选择“ 查看证书”。

    4. 在“ 详细信息 ”选项卡上,选择 “增强型密钥使用情况”。

驱动程序在重新签署驱动程序时使用以下过程:

  1. 追加Microsoft SHA2 嵌入式签名。

  2. 如果驱动程序二进制文件由客户使用自己的证书进行嵌入签名,请覆盖签名。

  3. 使用 SHA2 Microsoft 证书创建并签名新目录文件。 该目录替换客户提供的任何现有目录。

在 Windows 上测试驱动程序

安装示例驱动程序并在 Windows 上对其进行测试:

  1. 使用管理员权限打开命令提示符窗口。

  2. 转到驱动程序包文件夹,然后输入以下命令。

    C:\Echo> devcon install echo.inf root\ECHO
    
  3. 确认驱动程序安装过程未显示以下错误消息:

    Windows 无法验证此驱动程序软件的发布者 message._

使用多个驱动程序创建提交项目

按照以下步骤同时提交多个驱动程序:

  1. 为每个驱动程序创建子目录:

    显示示例驱动程序签名目录结构的图示。

  2. 准备一个 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