为公开发行签署驱动程序

在公开发行驱动程序包之前,我们建议你提交该程序包进行认证。有关详细信息,请参阅 Windows 硬件认证硬件仪表板服务。若要提交驱动程序包进行认证,必须使用从受信任的证书颁发机构(如 VeriSign)获取的证书对程序包进行签名。有关详细信息,请参阅获取 VeriSign 证书。还需要一个交叉证书,该证书由 Microsoft 提供。

假定你从 Verisign 获取了一对文件:一个私钥文件 (PVK) 和一个软件发布证书 (SPC)。还假定你拥有一个 Microsoft Visual Studio 解决方案,该解决方案包含一个名为 MyDriver 的驱动程序项目和一个名为 MyDriver Package 的驱动程序包项目。若要签署你的驱动程序包,请执行以下步骤。

  1. 使用 Pvk2Pfx 工具创建一个个人信息交换 (PFX) 证书。Pvk2Pfx 工具将你的 PVK 和 SPC 文件作为输入并创建一个 PFX 文件。对于本练习,我们假定你的 PFX 文件名为 MyCert.pfx。

    注意  创建你的 PFX 文件之后,便可以对其他驱动程序开发计算机上的其他驱动程序项目重复使用它。

     

  2. 若要确定你需要的交叉证书,请参阅用于内核模式代码签署的交叉证书。验证所需的交叉证书是否位于 $(BASEDIR)\CrossCertificates 中,其中 $(BASEDIR) 是 Windows 工具包的基本目录(例如,c:\Program Files (x86)\Windows Kits\8.0\CrossCertificates)。如果这里没有所需的交叉证书,请从 Microsoft 下载该交叉证书并将其复制到 $(BASEDIR)\CrossCertificates。

  3. 在 Visual Studio 中,打开包含 MyDriver 和 MyDriver Package 项目的解决方案。如果“解决方案资源管理器”窗口尚未打开,则从“视图”菜单中选择“解决方案资源管理器”。在“解决方案资源管理器”窗口中,右键单击程序包项目 MyDriver Package,然后选择“属性”

  4. 在程序包的属性页中,导航到“配置属性 > 驱动程序签署 > 常规”。 在“签署模式”下拉列表中,选择“产品签署”。对于“产品证书”,执行下列操作之一:

    • 输入签名证书的路径(例如,c:\Certs\MyCert.pfx)。

    • 选择“从文件选择”并浏览到你的签名证书。

    • 选择“从存储区选择”****并选择你之前导入到证书存储中的证书。

      注意  若要将证书导入存储中,请右键单击该证书文件(PFX 文件),然后选择“安装 PFX”。按照证书导入向导中的说明执行操作。

       

      注意  如果你决定稍后使用其他证书,则确保你的新证书已导入到证书存储中。如果选择“从文件选择”并浏览到你的新证书,那么这个新证书会自动导入到证书存储中。但是,如果你手动输入新证书的路径,那么这个新证书不会自动导入到证书存储中。在这种情况下,必须右键单击你的新证书并选择“安装 PFX”****。

       

  5. 在“驱动程序签名 > 常规”属性页上,对于 TimeStampServer****,在下拉列表中选择一个时间戳服务器。

    注意  使用下拉列表中的一个时间戳服务器需要你在构建你的驱动程序包时连接到 Internet。如果在构建驱动程序包时需要断开与 Internet 的连接,则清除 TimeStampServer 字段。

     

  6. 在程序包的属性页中,导航到“配置属性 > Inf2Cat > 常规”。在“运行 Inf2Cat”下拉列表中,选择“是”

  7. 关闭程序包的属性页。

  8. 右键单击驱动程序项目 MyDriver,然后选择“属性”****。

  9. 在驱动程序的属性页中,导航到“配置属性 > 驱动程序签署 > 常规”。将 TimeStampServer**** 设置为你在驱动程序包属性中使用的相同值。将“签署模式”设置为“产品签署”****并将“产品证书”设置为你在驱动程序包属性中使用的相同值。

  10. 当你准备构建驱动程序包时,按 F5****。Visual Studio 将自动签署你的程序包以及你的驱动程序文件。如果你已配置部署,那么 Visual Studio 还会将已签署的驱动程序包部署到测试计算机。有关详细信息,请参阅设置计算机以便进行驱动程序部署和测试 (WDK 8.1)

查看驱动程序包文件

构建你的解决方案之后,在文件资源管理器中导航到包含你的驱动程序包的文件夹。程序包中的其中一个文件为目录文件。该目录文件包含程序包的数字签名。有关查看已签署程序包中的文件的示例,请参阅基于模板编写 KMDF 驱动程序

获取 WHQL 版本签名

当你的驱动程序包通过认证测试时,该程序包可以由 Windows 硬件质量实验室 (WHQL) 签署。如果你的驱动程序包由 WHQL 签署,则可以通过 Windows 更新程序或其他 Microsoft 支持的分发机制进行分发。

签署程序包与签署单个驱动程序文件

驱动程序包包含多个文件。通常,驱动程序包包含一个或多个驱动程序文件、一个信息文件(INF 文件)以及一个目录文件。该目录文件包含有关该程序包中的其他文件的信息。当你签署目录文件时,目录文件中的签名用作整个驱动程序包的签名。换句话说,签署目录文件等同于签署驱动程序包

多数情况下,签署驱动程序包就足够了,无需签署各个驱动程序文件。但是,有时你既需要签署程序包,也需要签署各个驱动程序文件。例如,boot-start 驱动程序文件必须单独签署。签署单个驱动程序文件称为在驱动程序文件中嵌入签名**。

假定你拥有一个 Visual Studio 解决方案,该解决方案包含一个名为 MyDriver 的驱动程序项目和一个名为 MyDriver Package 的驱动程序包项目。Visual Studio 提供两组属性页:一个用于 My Driver,一个用于 My Driver Package。若要签署驱动程序包,请设置 My Driver Package 的“驱动程序签名”属性。若要在单个驱动程序文件中嵌入签名,请设置 My Driver 的“驱动程序签名”****属性。

当你为产品签名设置驱动程序包属性时,请记住相应地调整各个驱动程序文件的签名属性。关闭各个驱动程序文件的签名或将各个驱动程序文件设置为使用你为程序包指定的相同证书。

用两个签名签署驱动程序包

在某些情况下,你可能希望使用两个不同的签名来签署驱动程序包。例如,假定你希望驱动程序在 Windows 7 和 Windows 8 上运行。Windows 8 支持使用 SHA256 哈希算法创建的签名,但 Windows 7 不支持。对于 Windows 7,你需要使用 SHA1 哈希算法创建的签名。

假定你希望构建和签署将在 x64 硬件平台 Windows 7 和 Windows 8 上运行的驱动程序包。你可以采用使用 SHA1 的主签名签署驱动程序包。然后可以附加使用 SHA256 的辅助签名。可以对这两个签名使用相同的证书,也可以使用不同的证书。下面是使用 Visual Studio 创建两个签名的步骤。

  • 在“解决方案资源管理器”窗口中,右键单击“解决方案” SolutionName,然后选择“配置管理器”。对于驱动程序项目和程序包项目,将“配置”设置为“Win7 版本”,将“平台”设置为“x64”****。

  • 打开驱动程序包的属性页。导航到“配置属性 > 驱动程序签名 > 常规”。在“签署模式”下拉列表中,选择“产品签署”。对于“产品证书”,输入签名证书的路径。

  • 在驱动程序包的属性页中,导航到“配置属性 > 自定义构建步骤 > 常规”。对于“描述”,选择“执行自定义构建步骤”。对于“在以下时间之后执行”,选择“DriverProductionSign”。对于“命令行”****,输入此命令。

    Signtool sign /fd sha256 /ph /as /sha1 XX...XX $(TargetPath)

    其中 XX...XX 是你用于辅助签名的证书的哈希。

    注意  若要查看证书的哈希(也称为缩略图打印),请打开一个命令提示符窗口并导航到包含你的证书的目录。输入命令 certutil -dump CertName.pfx,其中 CertName.pfx 是你的证书的名称。

     

相关主题

签署驱动程序

Windows 硬件认证

硬件仪表板服务

Windows 驱动程序签名要求

适用于内核模式代码签名的交叉证书

内核模式代码签名概览

驱动程序签名

安装 Boot-Start 驱动程序

用于签署驱动程序的工具