SignTool.exe(签名工具)

更新:2011 年 4 月

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

安装 Visual Studio 和 Windows SDK 时会自动安装此工具。 要运行工具,我们建议您使用 Visual Studio 命令提示符或 Windows SDK 命令提示符(也称 CMD Shell)。 您可以使用这些实用程序轻松运行工具,而不需要导航到安装文件夹。 有关更多信息,请参见 Visual Studio 和 Windows SDK 命令提示

  • 如果您的计算机上已安装了 Visual Studio:在任务栏上依次单击 Start、All Programs、Visual Studio、Visual Studio Tools、Visual Studio Command Prompt。

    - 或 -

    如果您的计算机上已安装了 Windows SDK:在任务栏上依次单击 Start、All Programs、Windows SDK 文件夹和 Command Prompt(或CMD Shell)。

  • 在命令提示处,键入下列命令:

        signtool [command] [options] [file_name | ...]

参数

参数

说明

command

指定要对文件执行的操作的四个命令之一(catdb、sign、Timestamp 或 Verify)。 对每个命令的描述请参见下一个表。

options

用于修改命令的选项。 除了全局 /q 和 /v 选项之外,每个命令均支持一组唯一选项。

file_name

要进行签名的文件的路径。

签名工具支持下列命令。 每个命令使用不同的选项集,这些选项集被列在它们相应的节中。

命令

说明

catdb

在目录数据库中添加或移除目录文件。 目录数据库用于自动查找目录文件,并由 GUID 标识。 有关 catdb 命令支持的选项的列表,请参见 catdb 命令行选项

sign

对文件进行数字签名。 数字签名可以避免文件被篡改,并且基于签名证书使用户能够验证签名者。 有关 sign 命令支持的选项的列表,请参见 签名命令选项

Timestamp

时间戳文件。 有关 TimeStamp 命令支持的选项的列表,请参见 时间戳命令选项

Verify

通过确定签名证书是否由受信任的颁发机构、是否已撤消了签名证书,以及签名证书对于特定策略是否有效(此项可选)验证文件的数字签名。 有关 Verify 命令支持的选项的列表,请参见 验证命令选项

下列选项适用于所有签名工具命令。

全局选项

说明

/q

执行成功时不生成输出,执行失败时生成最少的输出。

/v

执行成功、执行失败或产生警告消息时生成详细输出。

catdb 命令行选项

下表列出了可用于 catdb 命令的选项。

Catdb 选项

说明

/d

指定更新默认目录数据库。 如果 /d和 /g 选项都未使用,则签名工具更新系统组件和驱动程序数据库。

/g GUID

指定更新由全局唯一标识符 (GUID) 标识的目录数据库。

/r

从目录数据库中移除指定的目录。 如果未指定该选项,“签名工具”将向目录数据库添加指定的目录。

/u

指定为添加的目录文件自动生成唯一的名称。 如有必要,重命名目录文件,以避免与现有的目录文件发生冲突。 如果未指定该选项,签名工具将覆盖与所添加的目录同名的任何现有目录。

签名命令选项

下表列出了可用于 sign 命令的选项。

签名命令选项

说明

/a

自动选择最佳的签名证书。 签名工具将查找满足所有指定条件的所有有效的证书,并选择有效时间最长的一个。 如果未指定该选项,签名工具仅查找一个有效的签名证书。

/ac  文件

将文件中的其他证书添加到签名块。

/c CertTemplateName

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

/csp CSPName

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

/d Desc

指定已签名内容的说明。

/du URL

为已签名文档的详细说明指定统一资源定位器 (URL)。

/f SignCertFile

指定文件中的签名证书。 如果文件是个人信息交换 (PFX) 格式且受密码保护,则使用 /p 选项来指定密码。 如果文件不包含私钥,则使用 /csp 和 /k 选项指定 CSP 和私钥容器名。

/fd

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

/i IssuerName

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

/kc PrivKeyContainerName

指定私钥容器名。

/n SubjectName

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

/nph

如果支持,为可执行文件取消页面的哈希。 默认值由 SIGNTOOL_PAGE_HASHES 环境变量和 wintrust.dll 版本决定。

/p Password(密码)

指定打开 PFX 文件时使用的密码。 (使用 /f 选项指定 PFX 文件。)

/ph

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

/r 根主题名称

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

/s StoreName

指定要在搜索证书时打开的存储区。 如果未指定该选项,则打开 My 存储。

/sha1 Hash(哈希)

指定签名证书的 SHA1 哈希。

/sm

指定使用一个计算机存储区,而不是使用用户存储区。

/t URL

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

/td alg

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

/tr URL

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

/u Usage(用法)

指定签名证书中必须存在的增强型密钥用法 (EKU)。 可以通过 OID 或字符串指定该用法的值。 默认用法为“代码签名”(1.3.6.1.5.5.7.3.3)。

/uw

指定“Windows 系统组件验证”(1.3.6.1.4.1.311.10.3.6)的使用情况。

时间戳命令选项

下表列出了可用于 TimeStamp 命令的选项。

TimeStamp 选项

说明

/t URL

指定时间戳服务器的 URL。 要执行时间戳操作的文件必须在以前已经进行了签名。 需要 /t 或 /tr 选项。

/td alg

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

/tr URL

指定 RFC 3161 时间戳服务器的 URL。 要执行时间戳操作的文件必须在以前已经进行了签名。 需要 /tr 或 /t 选项。

验证命令选项

验证选项

说明

/a

指定可以使用所有方法来验证文件。 首先,搜索目录数据库以确定是否在目录中对文件进行了签名。 如果未在任何目录中对文件进行签名,签名工具将尝试验证文件的嵌入签名。 验证可以或不能在目录中进行签名的文件时,建议使用该选项。 这些文件的示例包括 Windows 文件或驱动程序。

/ad

使用默认的目录数据库查找目录。

/as

使用系统组件(驱动程序)目录数据库查找目录。

/ag CatDBGUID

在目录数据库中通过 CatDBGUID 标识查找目录。

/c CatFile

通过名称指定目录文件。

/d

说明签名工具应打印描述和描述的 URL。

/kp

指定应使用内核模式驱动程序签名策略进行验证。

/o Version(版本)

通过操作系统版本验证文件。 版本具有如下格式:PlatformID:VerMajor.VerMinor.BuildNumber

/pa

说明应使用默认认证码验证策略。 如果未指定 /pa 选项,“签名工具”将使用 “Windows 驱动程序验证策略”。 此选项不能与 catdb 选项一起使用。

/pg PolicyGUID

通过 GUID 指定验证策略。 PolicyGUID 对应于验证策略的 ActionID。 此选项不能与 catdb 选项一起使用。

/ph

说明签名工具应打印并验证页数哈希值。

/r RootSubjectName

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

/tw

如果签名没有时间戳,则指定应该生成的一个警告。

返回值

当其终止时,签名工具返回以下的退出代码之一。

退出代码

说明

0

执行成功。

1

执行失败。

2

执行伴随着警告完成。

示例

以下命令将目录文件 MyCatalogFileName.cat 添加到系统组件和驱动程序数据库中。 如有防止替换现有的名称为 MyCatalogFileName.cat 的目录文件的必要,/v 选项会生成唯一的名称。

signtool catdb /v /u MyCatalogFileName.cat

以下命令通过使用最佳证书对文件进行自动签名。

signtool sign /a MyFile.exe

以下命令使用存储在密码保护 PFX 文件中的证书对文件进行数字签名。

signtool sign /f MyCert.pfx /p MyPassword MyFile.exe

以下命令对文件进行数字签名并加盖时间戳。 用于文件签名的证书存储在 PFX 文件中。

signtool sign /f MyCert.pfx /t http://timestamp.verisgn/com/scripts.timstamp.dll MyFile.exe

以下命令通过使用位于 My 存储区的证书对文件进行签名,其主题名称为 My Company Certificate。

signtool sign /n "My Company Certificate" MyFile.exe

以下命令对 ActiveX 控件进行签名,并提供提示用户安装控制时由 Internet Explorer 显示的信息。

Signtool sign /f MyCert.pfx /d: "MyControl" /du http://www.example.com/MyControl/info.html MyControl.exe

以下命令对以数字签名过的文件加盖时间戳。

signtool timestamp /t http://timestamp.verisgn/com/scripts.timstamp.dll MyFile.exe

以下命令验证已经签名的文件。

signtool verify MyFile.exe

以下命令验证可能已经在目录中签过名的系统文件。

signtool verify /a SystemFile.dll

以下命令验证在名为 MyCatalog.cat 目录中已签字的系统文件。

signtool verify /c MyCatalog.cat SystemFile.dll

请参见

参考

Visual Studio 和 Windows SDK 命令提示

其他资源

.NET Framework 工具

修订记录

Date

修订记录

原因

2011 年 4 月

添加了有关使用 Visual Studio 和 Windows SDK 命令提示符的信息。

信息补充。

2010 年 5 月

重组;更新了命令和选项。

客户反馈