本文介绍如何使用验证签名对驱动程序进行签名。 有关证明签名的详细信息和要求,请参阅 Windows 10 证明签名驱动程序。
重要
自 2023 年 3 月 1 日起,面向零售用户的证明签名驱动程序不再通过 Windows 更新发布。 在使用 CoDev 或 测试注册表项/Surface SSRK 选项进行测试时,继续支持经过验证签名的驱动程序。
先决条件
阅读并了解适用于测试方案的 Windows 10 证明签名驱动程序 的要求。
注册参加硬件开发人员计划。 如果未注册,请按照 注册 Microsoft Windows 硬件开发人员计划中的步骤进行操作。
必须具有扩展验证 (EV) 代码签名证书。 检查你的组织是否已有代码签名证书。
如果有现有证书,请使证书可用。
如果组织没有证书, 请购买 EV 证书。
按照 下载和安装 Windows ADK 中所述的过程下载并安装 Windows 评估和部署工具包(Windows ADK)。
(可选)下载本文中使用的 Echo 驱动程序示例 ,该示例在 GitHub 上可用。
创建 CAB 文件
以下过程使用 Echo 驱动程序示例 创建 CAB 文件提交,以演示这些步骤。
典型的 CAB 文件提交必须包含以下组件:
驱动程序本身,例如 Echo.sys。
仪表板使用驱动程序 INF 文件(.inf)来简化签名过程。
用于调试信息的符号文件,例如 Echo.pdb。 Microsoft自动崩溃分析工具需要 .pdb 文件。
目录 .CAT 文件是必需的,仅用于公司验证。 Microsoft重新生成目录文件,并替换之前提交的任何目录文件。
注释
CAB 文件中的每个驱动程序文件夹都必须支持同一组体系结构。 例如,它们必须支持 x86、x64,或者它们必须都支持 x86 和 x64。
引用驱动程序位置时,请勿使用 UNC 文件共享路径。\server\share
必须使用映射的驱动器号才能使 CAB 有效。
若要创建 CAB 文件,请执行以下步骤:
收集需要签名的二进制文件到一个目录中。 此示例使用
C:\Echo
文件夹。使用管理员权限打开命令提示符窗口。
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).
准备 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
输入以下命令以创建 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
在子目录中找到 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 文件进行签名后,即可在合作伙伴中心提交该文件:
转到 合作伙伴中心硬件仪表板 并使用凭据登录。
选择 “提交新硬件:
在“包和签名属性”部分,输入驱动程序提交的产品名称。 此名称可用于搜索和整理驱动程序提交。
注释
与另一家公司共享驱动程序时,该名称可见。
取消选中这两个测试签名选项(未选中)。
对于 “请求签名 ”选项,选择要包含在驱动程序包中的签名:
选择页面底部的“提交”。
签名过程完成后,从硬件仪表板下载已签名的驱动程序。
验证驱动程序是否已正确签名
使用以下步骤确认驱动程序已正确签名:
下载提交文件后,提取驱动程序文件。
使用管理员权限打开命令提示符窗口。
输入以下命令以验证驱动程序是否已按预期进行签名:
C:\Echo> SignTool verify Echo.Sys
若要列出其他信息并让 SignTool 验证包含多个签名的文件中的所有签名,请输入以下命令:
C:\Echo> SignTool verify /pa /ph /v /d Echo.Sys
若要确认驱动程序的 EKU,请完成以下步骤:
打开 Windows 资源管理器并找到二进制文件。 右键单击该文件,然后选择“ 属性”。
在“ 数字签名 ”选项卡上,选择“签名”列表中的列出项。
选择 “详细信息”,然后选择“ 查看证书”。
在“ 详细信息 ”选项卡上,选择 “增强型密钥使用情况”。
驱动程序在重新签署驱动程序时使用以下过程:
追加Microsoft SHA2 嵌入式签名。
如果驱动程序二进制文件由客户使用自己的证书进行嵌入签名,请覆盖签名。
使用 SHA2 Microsoft 证书创建并签名新目录文件。 该目录替换客户提供的任何现有目录。
在 Windows 上测试驱动程序
安装示例驱动程序并在 Windows 上对其进行测试:
使用管理员权限打开命令提示符窗口。
转到驱动程序包文件夹,然后输入以下命令。
C:\Echo> devcon install echo.inf root\ECHO
确认驱动程序安装过程未显示以下错误消息:
Windows 无法验证此驱动程序软件的发布者 message._
使用多个驱动程序创建提交项目
按照以下步骤同时提交多个驱动程序:
为每个驱动程序创建子目录:
准备一个 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