SignTool

SignTool (Signtool.exe) 是一个命令行 CryptoAPI 工具,用于对文件进行数字签名,验证文件中的签名和时间戳文件。

    SignTool [Operation] [Options] [FileName ...]

操作、选项和参数的部分列表

操作

catdb
配置 SignTool 以更新目录数据库。 SignTool 可以将目录文件添加到数据库中,也可以从数据库中删除目录。 默认情况下, catdb 命令会将文件(其名称由 FileName 参数指定)添加到系统组件 (驱动程序) 数据库。

注意

目录数据库用于自动查找目录文件。

sign
将 SignTool 配置为使用 FileName 参数指定名称的文件进行数字签名。

timestamp
将 SignTool 配置为使用 FileName 参数指定名称的文件的时间戳。

verify
配置 SignTool 以验证其名称由 FileName 参数指定的文件的数字签名。

Catdb 操作选项

/d
配置 SignTool 以更新目录数据库。 如果不使用 /d/g 选项,则 SignTool 会更新系统组件和驱动程序数据库。

/GGuid
配置 SignTool 以更新由 GUID 参数标识的目录数据库。

/r
配置 SignTool 以从目录数据库中移除每个目录文件,其名称由 FileName 参数指定。 如果未指定此选项,SignTool 将向目录数据库添加指定的目录文件。

/u
如有必要,配置 SignTool 以生成唯一名称,以防止与目录数据库中的现有目录文件发生冲突。 如果未指定此选项,SignTool 将覆盖与所添加的目录同名的任何现有目录。

签名操作选项

/a 将 SignTool 配置为自动选择最佳签名证书。 如果此选项不存在,则 SignTool 会仅查找一个签名证书。

/AcCrossCertFileName
指定一个跨证书文件的名称,该文件用于名为CertificateName的软件 Publisher 证书 (SPC) ,并安装在证书存储StoreName中。 仅当签名证书为 SPC 时,才应使用此选项。

/cCertTemplateName
指定用于对证书进行签名的证书模板名(一个 Microsoft 扩展)。

/CspCSPName
指定包含私钥容器的加密服务提供程序 (CSP)。

/DDesc
指定已签名内容的说明。

/DuURL
指定已签名内容的展开说明的 URL。

/FSignCertFile
指定文件中的签名证书。 仅支持 Exchange (PFX) 文件格式的个人信息。 可以使用 Pvk2Pfx 工具将 SPC 和 PVK 文件转换为 PFX 格式。

如果该文件是使用密码保护的 PFX 格式,则使用 /p 选项来指定密码。 如果文件不包含私钥,请分别使用 /csp/k 选项来指定 csp 和私钥容器名称。

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

/IIssuerName
指定签名证书的颁发者的名称。 该值可以是整个颁发者名称的子字符串。

/JDLL
指定提供签名特性的 DLL 的名称。

/JpParameterName
指定传递给 /j 命令指定的 DLL 的参数。

/KcPrivKeyContainerName
指定私钥的密钥容器名称。

/NSubjectName
指定签名证书的主题的名称。 该值可以是整个主题名称的子字符串。

/nph
如果支持,则取消可执行文件的页面哈希。 默认值由 SIGNTOOL_PAGE_HASHES 环境变量和 wintrust.dll 版本决定。 对于非 PE 文件,忽略此选项。

/P密码
指定打开 PFX 文件时要使用的密码。 PFX 文件可以使用 /f 选项指定

/P7路径
指定为每个指定的内容文件生成的公钥加密标准 (PKCS) #7 文件。 PKCS #7 文件命名为路径\文件名.p7。

/P7ce
为已签名的 PKCS #7 内容指定选项。 将值设置为“嵌入的”,可将已签名内容嵌入到 PKCS #7 文件中,或设置为“DetachedSignedData”以便生成分离的 PKCS #7 文件的已签名数据部分。 如果未使用 /p7ce 选项,则默认情况下将嵌入已签名的内容。

/P7coOID
指定标识已签名的 PKCS #7 内容的对象标识符 (OID)。

/ph 在 如果支持,则生成可执行文件的页面哈希。

/RRootSubjectName
指定签名证书必须链接到的根证书的使用者名称。 该值可以是根证书的整个主题名称的子字符串。

/SStoreName
指定在搜索要用于对文件进行签名的证书时要打开的证书存储区的名称。 如果未指定此选项,则打开 " 的证书存储区"。

/Sha1哈希
指定签名证书的 SHA1 哈希。

/sm
将 SignTool 配置为使用计算机证书存储而不是用户证书存储区。

/TURL
指定时间戳服务器的 URL。 如果未提供此选项,则签名文件不是时间戳。 目录文件或驱动程序文件应带有时间戳,因为如果签名者的密钥已泄露,则时间戳将提供吊销用于对文件进行签名的密钥所需的信息。

/tdalg
与/tr 选项一起使用,以请求 RFC 3161 时间戳服务器使用的摘要算法。

/TrURL
指定 RFC 3161 时间戳服务器的 URL。 如果不存在 (或 /t) ,则签名的文件不会加时间戳。 如果时间戳操作失败,将生成一个警告。 此选项不能与 /t 选项一 起使用。

/uUsage
指定签名证书中必须存在的增强型密钥用法 (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文件。

/tURL
指定时间戳服务器的 URL。 已时间戳的文件必须以前已签名

/tdalg
请求 RFC 3161 时间戳服务器使用的摘要算法。 /td/tr 选项 一起使用。

/tpindex
对引用处的签名进行时间戳操作。

/tralg
请求 RFC 3161 时间戳服务器使用的摘要算法。 /td/tr 选项 一起使用。

验证操作选项

/a
指定可以使用所有方法来验证文件。 首先,搜索目录数据库以确定是否在目录中对文件进行签名。 如果文件未在任何目录中登录,SignTool 会尝试验证文件的嵌入式签名。 验证可以或不能在目录中进行签名的文件时,建议使用该选项。

/ad
指定仅搜索默认目录数据库以查找已登录文件的目录。

/all
验证包含多个签名的文件中的所有签名。

/as
指定仅搜索 (驱动程序) 目录数据库的系统组件,以搜索已登录文件的目录。

/agCatDBGUID
指定仅搜索通过 CatDBGUID 参数标识的目录数据库,以查找已登录文件的目录。

/cCatalogFileName
指定目录文件的名称。

/d 指定签名工具应打印说明和说明 URL。

/dsindex
验证指定位置的签名。

/hash {SHA1SHA256|}
指定在目录中搜索文件时要使用的可选哈希算法。

/kp
配置 SignTool 以验证 FileName 参数指定的每个文件的数字签名是否符合内核模式代码签名策略以及 Windows Vista 及更高版本的 Windows 的 PnP 设备安装签名要求。 如果未指定此选项,则 SignTool 仅验证签名是否符合 PnP 设备安装签名要求。

/ms
使用多个验证语义。 这是 WinVerifyTrust 函数在 Windows 8 及以上版本上的默认行为。

/oVersion
根据操作系统版本验证文件。 Version 参数的格式 PlatformID:VerMajor.VerMinor.BuildNumber

建议使用 /o 选项。 如果 未指定 /o ,SignTool 可能会返回意外结果。 例如,如果不包含 /o 选项,在较旧的操作系统上正确验证的系统目录可能无法在较新的操作系统上正确验证。

/p7
验证 PKCS #7 文件。 无现有策略用于 PKCS #7 验证。 该签名处于选中状态,并为签名证书生成了链。

/pa
配置 SignTool 以验证 FileName 参数指定的每个文件的数字签名是否符合 PnP 设备安装签名要求

注意

此选项不能与 catdb 选项一 起使用。

/pgPolicyGUID
通过 GUID 指定验证策略。 PolicyGUID 对应于验证策略的 ActionID。

注意

此选项不能与 catdb 选项一 起使用。

/ph 指定签名工具应打印并验证页哈希值。

/rRootSubjectName
指定签名证书必须链接到的根证书的主题名称。 该值可以是根证书的整个主题名称的子字符串。

/tw
指定在签名未设置时间戳时生成警告。

常规选项

/q
将 SignTool 配置为在成功执行时不显示任何输出,将失败执行的输出降至最低。

/v
配置 SignTool 以显示详细版本的操作和警告消息。

/?
将 SignTool 配置为在命令窗口中显示帮助信息。

文件名。。。
指定一个或多个文件名的列表。 SignTool 将根据命令对指定文件进行签名、时间戳或验证。 如果使用 catdb 命令,SignTool 将在目录数据库中添加或删除指定的文件。

对于符号、时间戳验证命令,文件可以是驱动程序包或驱动程序文件的目录文件。

对于 catdb 命令,文件必须是驱动程序包的 目录文件

注解

SignTool 支持大量选项。 本主题中所述的选项仅限于可用于对驱动程序包或驱动程序文件进行签名或验证的选项。

有关 SignTool 参数的完整列表,请参阅 Microsoft SignTool 网站。

有关签名文件的信息,请参阅 Microsoft 加密工具 网站。

32 位版本的 SignTool 位于 WDK 的 bin\i386 文件夹中。 该工具的 64 位版本位于 WDK 的 bin\amd64 和 bin\ia64 文件夹中。

示例

以下示例演示了如何使用 Software Publisher Certificate (SPC ) 和相应的跨证书对驱动程序包的目录文件进行签名。 此示例对 64 位版本的 Windows Vista 和更高版本的 Windows 的驱动程序包进行签名有效,这些驱动程序包强制实施内核模式代码签名策略。 该示例对驱动程序包的目录文件进行 AbcCatFileName.cat。 为了对目录文件进行签名,该示例使用交叉证书 AbcCrossCertificate 和 AbcSPCCertificate 证书。 AbcSPCCertificate 证书位于 AbcCertificateStore 证书存储中。

该示例还使用公开可用的时间戳服务器对目录文件进行签名。 时间戳服务器由 DigiCert 提供,其 URL 为 http://timestamp.digicert.com

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

向 System Component (Driver) 数据库添加目录文件的示例

以下示例演示了如何使用 SignTool 将目录文件 CatalogFileName.cat 添加到系统组件 (驱动程序) 数据库。 /v 选项将 SignTool 配置为在详细模式下运行,并且 /u 选项将 SignTool 配置为生成要添加的目录文件的唯一名称(如有必要)以防止替换与 CatalogFileName.cat 同名的现有目录文件。

SignTool catdb /v /u CatalogFileName.cat