SignTool
SignTool (Signtool.exe) 是一种命令行 CryptoAPI 工具,可对文件进行数字签名、验证文件中的签名和时间戳文件。
SignTool [Operation] [Options] [FileName ...]
操作、选项和参数的部分列表
Operations
catdb
配置 SignTool 以更新目录数据库。 SignTool 将目录文件添加到数据库,或者从数据库中删除目录。 默认情况下, catdb 命令会将名称由 FileName 参数指定的文件添加到系统组件(驱动程序)数据库。
注意
目录数据库用于自动查找目录文件。
sign
将 SignTool 配置为对名称由 FileName 参数指定的文件进行数字签名。
timestamp
配置 SignTool,以时间戳文件名称由 FileName 参数指定。
验证
配置 SignTool 以验证由 FileName 参数指定其名称的文件的数字签名。
Catdb 操作选项
/d
配置 SignTool 以更新目录数据库。 如果未使用 /d 和 /g 选项,SignTool 将更新系统组件和驱动程序数据库。
/g Guid
配置 SignTool 以更新 GUID 参数标识的目录数据库。
/r
配置 SignTool 以从目录数据库中删除每个目录文件(其名称由 FileName 参数指定)。 如果未指定此选项,SignTool 会将指定的目录文件添加到目录数据库。
/u
将 SignTool 配置为生成目录文件的唯一名称(如有必要)以防止与目录数据库中的现有目录文件发生冲突。 如果未指定此选项,SignTool 将覆盖与要添加的目录同名的任何现有目录。
签名操作选项
/a 配置 SignTool 以自动选择最佳签名证书。 如果此选项不存在,则 SignTool 希望仅找到一个签名证书。
/ac CrossCertFileName
指定与名为 CertificateName 的软件发布者证书(SPC)一起使用且安装在证书存储区 StoreName 中的跨证书文件的名称。 仅当签名证书是 SPC 时,才应使用此选项。
/c CertTemplateName
指定用于对证书进行签名的证书模板名(一个 Microsoft 扩展)。
/csp CSPName
指定包含私钥容器的加密服务提供程序 (CSP)。
/d Desc
指定已签名内容的说明。
/du URL
指定已签名内容的扩展说明的 URL。
/f SignCertFile
指定文件中的签名证书。 仅支持个人信息交换(PFX)文件格式。 可以使用 Pvk2Pfx 工具将 SPC 和 PVK 文件转换为 PFX 格式。
如果文件采用受密码保护的 PFX 格式,请使用 /p 选项指定密码。 如果文件不包含私钥,请使用 /csp 和 /k 选项分别指定 CSP 和私钥容器名称。
/fd
指定要用于创建文件签名的文件摘要算法。 默认值为 SHA1。
/i IssuerName
指定签名证书的颁发者的名称。 该值可以是整个颁发者名称的子字符串。
/j DLL
指定提供签名属性的 DLL 的名称。
/jp ParameterName
指定传递给 /j 命令指定的 DLL 的参数。
/kc PrivKeyContainerName
指定私钥的密钥容器名称。
/n SubjectName
指定签名证书的主题的名称。 该值可以是整个主题名称的子字符串。
/nph
如果支持,则取消可执行文件的页面哈希。 默认值由 SIGNTOOL_PAGE_HASHES 环境变量和 wintrust.dll 版本决定。 对于非 PE 文件,忽略此选项。
/p 密码
指定打开 PFX 文件时要使用的密码。 可以使用 /f 选项指定 PFX 文件
/p7 路径
指定为每个指定的内容文件生成的公钥加密标准 (PKCS) #7 文件。 PKCS #7 文件命名为 path\filename.p7。
/p7ce 值
为已签名的 PKCS #7 内容指定选项。 将 Value 设置为“嵌入的”,可将已签名内容嵌入到 PKCS #7 文件中;如果设置为“DetachedSignedData”,则可生成分离的 PKCS #7 文件的已签名数据部分。 如果未使用 /p7ce 选项,则默认嵌入已签名的内容。
/p7co OID
指定标识已签名的 PKCS #7 内容的对象标识符 (OID)。
/ph 如果受支持,则为可执行文件生成页哈希。
/r RootSubjectName
指定签名证书必须链接到的根证书的使用者名称。 该值可以是根证书的整个主题名称的子字符串。
/s StoreName
指定在搜索要用于签名文件的证书时要打开的证书存储的名称。 如果未指定此选项,则会 打开“我的 证书存储”。
/sha1 哈希
指定签名证书的 SHA1 哈希。
/sm
将 SignTool 配置为使用计算机证书存储而不是用户证书存储。
/t URL
指定时间戳服务器的 URL。 如果未提供此选项,则签名的文件不会加时间戳。 目录文件或驱动程序文件应为时间戳,因为如果签名者的密钥遭到入侵,时间戳将提供撤销用于对文件进行签名的密钥所需的信息。
/td alg
与 /tr 选项一起使用以请求 RFC 3161 时间戳服务器使用的摘要算法。
/tr URL
指定 RFC 3161 时间戳服务器的 URL。 如果此选项(或 /t)不存在,则签名的文件将不会加时间戳。 如果时间戳操作失败,将生成一个警告。 此选项不能与 /t 选项一起使用。
/u 用法
指定签名证书中必须存在的增强型密钥用法 (EKU)。 可以通过 OID 或字符串指定该用法的值。 默认用法为“代码签名”(1.3.6.1.5.5.7.3.3)。
/uw 指定使用“Windows 系统组件验证”(1.3.6.1.4.1.311.10.3.6)。
时间戳操作选项
/p7 时间戳 PKCS #7 文件。
/t URL
指定时间戳服务器的 URL。 以前必须对文件进行时间戳签名
/td alg
请求 RFC 3161 时间戳服务器使用的摘要算法。 /td 与 /tr 选项一起使用。
/tp 索引
对 index 处的签名进行时间戳操作。
/tr alg
请求 RFC 3161 时间戳服务器使用的摘要算法。 /td 与 /tr 选项一起使用。
验证操作选项
/a
指定可以使用所有方法来验证文件。 首先,搜索目录数据库以确定是否在目录中对文件进行签名。 如果文件未在任何目录中登录,SignTool 将尝试验证文件的嵌入签名。 验证可以或不能在目录中进行签名的文件时,建议使用该选项。
/广告
指定仅搜索文件登录的目录的默认目录数据库。
/all
验证包含多个签名的文件中的所有签名。
/如
指定仅搜索系统组件(驱动程序)目录数据库,以查找文件已登录的目录。
/ag CatDBGUID
指定仅搜索通过 CatDBGUID 参数标识的目录数据库,以查找文件已登录的目录。
/c CatalogFileName
指定目录文件的名称。
/d 指定签名工具应打印说明和说明 URL。
/ds 索引
验证指定位置的签名。
/hash {SHA1|SHA256}
指定在目录中搜索文件时要使用的可选哈希算法。
/kp
配置 SignTool 以验证 FileName 参数指定的每个文件的数字签名是否符合内核模式代码签名策略和 Windows Vista 及更高版本的 Windows 的 PnP 设备安装签名要求。 如果未指定此选项,SignTool 将仅验证签名是否符合 PnP 设备安装签名要求。
/女士
使用多个验证语义。 这是 Windows 8 及更高版本上 WinVerifyTrust 函数调用的默认行为。
/o 版本
根据操作系统版本验证文件。 Version 参数的格式为 PlatformID:VerMajor.VerMinor.BuildNumber
建议使用 /o 选项。 如果未 指定 /o ,则 SignTool 可能会返回意外的结果。 例如,如果未包含 /o 选项,则较旧操作系统上正确验证的系统目录可能无法在较新的操作系统上正确验证。
/p7
验证 PKCS #7 文件。 无现有策略用于 PKCS #7 验证。 该签名处于选中状态,并为签名证书生成了链。
/pa
配置 SignTool 以验证 FileName 参数指定的每个文件的数字签名是否符合 PnP 设备安装签名要求。
注意
此选项不能与 catdb 选项一起使用。
/pg PolicyGUID
通过 GUID 指定验证策略。 PolicyGUID 相当于验证策略的 ActionID。
注意
此选项不能与 catdb 选项一起使用。
/ph 指定签名工具应打印和验证页面哈希值。
/r RootSubjectName
指定签名证书必须链接到的根证书的使用者名称。 该值可以是根证书的整个主题名称的子字符串。
/tw
指定如果签名未加时间戳,则会生成警告。
常规选项
/q
将 SignTool 配置为在成功执行时不显示任何输出,以及执行失败的最小输出。
/v
配置 SignTool 以显示操作和警告消息的详细版本。
/?
配置 SignTool 以显示命令窗口中的帮助信息。
文件名。。。
指定一个或多个文件名的列表。 根据命令,SignTool 将对指定文件进行签名、时间戳或验证。 如果使用 catdb 命令,SignTool 将从目录数据库中添加或删除指定的文件。
对于签名、时间戳和验证命令,文件可以是驱动程序包或驱动程序文件的目录文件。
对于 catdb 命令,文件必须是驱动程序包的目录文件。
注解
SignTool 支持大量选项。 本主题中所述的选项仅限于可用于对驱动程序包或驱动程序文件进行签名或验证的选项。
有关 SignTool 参数的完整列表,请参阅 Microsoft SignTool 网站。
有关对文件进行签名的详细信息,请参阅Microsoft 加密工具 网站。
SignTool 的 32 位版本位于 WDK 的 bin\i386 文件夹中。 该工具的 64 位版本位于 WDK 的 bin\amd64 和 bin\ia64 文件夹中。
示例
下面是如何使用软件发布者证书(SPC)和相应的跨证书对驱动程序包的目录文件进行签名的示例。 此示例对 64 位版本的 Windows Vista 和更高版本的 Windows 的驱动程序包进行签名有效,该版本强制实施内核模式代码签名策略。 该示例 AbcCatFileName.cat 对驱动程序包的目录文件进行签名。 为了对目录文件进行签名,该示例使用跨证书 AbcCrossCertificate 和 AbcSPCCertificate 证书。 AbcSPCCertificate 证书位于 AbcCertificateStore 证书存储中。
该示例还使用公开可用的时间戳服务器对目录文件进行签名。 时间戳服务器由 DigiCert 提供,其 URL 为 http://timestamp.digicert.com
. 有关详细信息,请参阅 RFC3161合规的时间戳颁发机构 (TSA) 服务器。
SignTool sign /ac AbcCrossCertificate.cer /s AbcCertificateStore /n AbcSPCCertificate /t http://timestamp.digicert.com AbcCatFileName.cat
下面是如何使用 SPC 和跨证书在驱动程序文件中嵌入签名的示例。 所有参数都与对目录文件进行签名的示例相同,但签名的文件AbcDriverFile.sys而不是目录文件 AbcCatFileName.cat。
SignTool sign /ac AbcCrossCertificate.cer /s AbcCertificateStore /n AbcSPCCertificate /t http://timestamp.digicert.com AbcDriverFile.sys
下面的示例演示如何使用商业发布证书或商业测试证书对驱动程序包的目录文件进行签名。 此示例对于 32 位版本的 Windows Vista 和更高版本的 Windows 对驱动程序包进行签名有效,该版本不强制实施内核模式代码签名策略。 该示例 CatalogFileName.cat 对驱动程序包的目录文件进行签名。 此示例使用位于 TestCertificateStore 证书存储中的 AbcTestCertificate 测试证书对目录文件进行签名。
该示例还使用公开可用的时间戳服务器对目录文件进行签名。 时间戳服务器由 DigiCert 提供,其 URL 为 http://timestamp.digicert.com
.
SignTool sign /s TestCertificateStore /n AbcTestCertificate /t http://timestamp.digicert.com CatalogFileName.cat
验证示例
下面是如何验证驱动程序包目录文件的签名是否符合内核模式代码签名策略和 PnP 设备安装签名要求的示例。 该示例验证目录文件的签名 AbcCatalogFile.cat。
SignTool verify /kp CatalogFileName.cat
下面的示例演示如何验证驱动程序包目录文件中列出的文件的签名是否符合内核模式代码签名策略和 PnP 设备安装签名要求。 该示例验证文件 AbcDriverPackage.inf 的签名,该文件必须在目录文件中具有指纹条目 CatalogFileName.cat。
SignTool verify /kp /c CatalogFileName.cat AbcDriverPackage.inf
以下示例演示如何验证嵌入式签名是否符合 Windows Vista 和更高版本的 Windows 上的内核模式代码签名策略。 该示例验证嵌入在驱动程序文件中的签名AbcDriverFile.sys。
SignTool verify /kp AbcDriverFile.sys
下面的示例演示如何验证驱动程序包目录文件的签名是否符合 PnP 设备安装签名要求。 该示例验证目录文件的签名 CatalogFileName.cat。
SignTool verify /pa CatalogFileName.cat
将目录文件添加到系统组件(驱动程序)数据库的示例
下面的示例演示如何使用 SignTool 将目录文件 CatalogFileName.cat 添加到系统组件(驱动程序)数据库。 /v 选项将 SignTool 配置为以详细模式运行,/u 选项将 SignTool 配置为在必要时为要添加的目录文件生成唯一名称,以防止替换与 CatalogFileName.cat 同名的现有目录文件。
SignTool catdb /v /u CatalogFileName.cat