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