开发和调试的时候驱动程序还是很不稳定会遇到各种问题,所以该形态下的驱动程序不适合也不能成功获得微软签名,所以在该阶段为了能让驱动程序可以在windows电脑上可以正常运行调试测试。为了能达到这个目标我们就要对驱动进行测试签名,以方便我们工程师调试,下面我就介绍一下测试签名的整个过程。
一、测试证书的创建
测试签名需要测试证书。 生成测试证书后,可以使用它对多个驱动程序或驱动程序包进行测试签名。
本主题介绍如何使用MakeCert工具创建测试证书。 在大多数开发环境中,通过 MakeCert 生成的测试证书应该足以测试测试签名驱动程序或驱动程序包的安装和加载。
以下命令行示例使用 MakeCert 来完成以下任务:
· 创建名为 " 51whql .com (测试)" 的自签名测试证书。 此证书对使用者名称和证书颁发机构(CA)使用相同的名称。
· 将证书的副本放入名为whqlTest的输出文件中。
· 将证书的副本放入名为PrivateCertStore的证书存储中。 如果将测试证书放在PrivateCertStore中,则会将其与系统上的其他证书隔离开来。
使用以下 MakeCert 命令创建51whql .com (Test) 证书:
cmd
makecert -r -pe -ss PrivateCertStore -n CN=51whql.com(Test) -eku 1.3.6.1.5.5.7.3.3 WhqlTest.cer
其中:
· -R选项创建一个自签名证书,该证书具有相同的颁发者和使用者名称。
· -Pe选项指定可以导出与证书关联的私钥。
· -Ss选项指定包含测试证书(PrivateCertStore)的证书存储的名称。
· -N CN = option 指定证书的名称("51whql.com")。 此名称与SignTool工具一起用于标识证书。
· EKU 选项将一个或多个以逗号分隔的增强型密钥用法对象标识符(oid)列表插入到证书中。 例如, -eku 1.3.6.1.5.5.7.3.2 插入客户端身份验证 OID。 有关允许的 Oid 的定义,请参阅 CryptoAPI 2.0 中的 Wincrypt.h 文件。
· WhqlTest是包含测试证书的副本的文件名,即 51whql.com (test)。 证书文件用于将证书添加到 "受信任的根证书颁发机构" 证书存储和 "受信任的发布者" 证书存储中。
包含测试证书的证书存储区将添加到 Windows 在创建证书存储的开发计算机上为用户帐户管理的证书存储列表。
开发人员只需要创建一个 MakeCert 测试证书来对开发计算机上的所有驱动程序包进行签名。
二、配置支持测试证书的电脑
管理员模式运行cmd
输入命令:bcdedit /set testsigning on
三、进行测试签名
创建或更新驱动程序包的编录文件后,可以通过SignTool对该目录文件进行签名。 签名后,如果修改了驱动程序包的任何组件,则存储在目录文件中的数字签名将会失效。
对编录文件进行数字签名时,SignTool 会将数字签名保存在目录文件中。 SignTool 不会更改驱动程序包的组件。 但是,由于目录文件包含驱动程序包的组件的哈希值,因此,只要这些组件将哈希到相同的值,就会保留目录文件中的数字签名。
SignTool 还可以向数字签名添加时间戳。 时间戳允许确定创建签名的时间,并在必要时支持更灵活的证书吊销选项。
以下命令行说明了如何运行 SignTool 来执行以下操作:
· 对toastpkg.inf示例驱动程序包的tstamd64.cat目录文件进行测试签名。
· 使用 51whql.com (测试 PrivateCertStore 中的) 证书来测试签名。
· 通过时间戳颁发机构 (TSA) 来标记数字签名。
若要对 tstamd64.cat 目录文件进行测试签名,请运行以下命令行:
Signtool sign /v /fd sha256 /s PrivateCertStore /n 51whql.com(Test) /t http://timestamp.digicert.com tstamd64.cat
其中:
· Sign命令将 SignTool 配置为对指定的编录文件 tstamd64.cat 进行签名。
· /V选项启用详细操作,其中,SignTool 显示成功执行和警告消息。
· /Fd选项指定用于创建文件签名的文件摘要算法。 默认值为 SHA1。
· /S选项指定包含测试证书的证书存储 (*PrivateCertStore) *的名称。
· /N选项指定在指定的证书存储中安装的 (51whql.com (测试) # B3的证书的名称。
· /T选项指定了 http://timestamp.digicert.com 用于对数字签名进行时间戳的 TSA () 的 URL。