通过嵌入式签名对驱动程序二进制文件进行发布签名

签名的 目录文件 是正确安装和加载大多数 驱动程序包所需的全部内容。 但是,在某些情况下,驱动程序包中某些二进制文件的嵌入式签名可能也是必需的。 嵌入式签名是指将数字签名添加到驱动程序的二进制映像文件本身,而不是依赖于目录文件中的数字签名。 因此,当驱动程序已嵌入签名时,会修改驱动程序的二进制映像。

内核模式二进制文件的嵌入式签名 (例如,每当以下情况下,都需要驱动程序和关联的.dll文件) :

  • 驱动程序二进制文件是 启动驱动程序。 在 64 位版本的 Windows Vista 和更高版本的 Windows 中, 内核模式代码签名要求 规定 启动驱动程序 必须具有嵌入式签名。 无论驱动程序的驱动程序包是否具有数字签名的目录文件,这都是必需的。

  • 驱动程序二进制文件是通过不涉及驱动程序包和目录文件的方式安装的。

目录文件一样, SignTool 工具用于使用测试证书在内核模式二进制文件中嵌入数字签名。 以下命令行演示如何运行 SignTool 执行以下操作:

  • 对 Toastpkg 示例的二进制文件的 64 位版本进行测试签名,toaster.sys。 在 WDK 安装目录中,此文件位于 src\general\toaster\toastpkg\toastcd\amd64 目录中。

  • 使用商业证书颁发机构 (CA) 颁发的软件发布者证书 (SPC ) 。

  • 对 SPC 使用兼容的交叉证书。

  • 通过时间戳机构向数字签名分配时间戳, (TSA) 。

若要对 toaster.sys 文件进行测试签名,请运行以下命令行:

Signtool sign /v /fd sha256 /ac MSCV-VSClass3.cer /s MyPersonalStore /n contoso.com /t http://timestamp.digicert.com amd64\toaster.sys

其中:

  • sign 命令将 SignTool 配置为对指定的内核模式二进制文件进行签名, amd64\toaster.sys

  • /v 选项启用详细操作,其中 SignTool 显示成功执行和警告消息。

  • /fd 选项指定用于创建文件签名的文件摘要算法。 默认值为 SHA1。

  • /ac 选项指定包含从 CA 获取的跨证书 (MSCV-VSClass3.cer) 的文件的名称。 如果交叉证书不在当前目录中,请使用完整路径名称。

  • /s 选项指定包含 SPC 的个人证书存储 (MyPersonalStore) 的名称。

  • /n 选项指定安装在指定证书存储中的证书 (Contoso.com) 的名称。

  • /t 选项指定将标记数字签名的 TSA (http://timestamp.digicert.com) 的 URL。

重要

如果签名者的代码签名私钥泄露,包括时间戳可为吊销密钥提供必要的信息。

  • amd64\toaster.sys 指定将嵌入签名的内核模式二进制文件的名称。

有关 SignTool 及其命令行参数的详细信息,请参阅 SignTool

有关通过嵌入签名对驱动程序进行发布签名的详细信息,请参阅 发布签名驱动程序包发布对驱动程序文件进行签名