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 命令提示
其他资源
修订记录
Date |
修订记录 |
原因 |
---|---|---|
2011 年 4 月 |
添加了有关使用 Visual Studio 和 Windows SDK 命令提示符的信息。 |
信息补充。 |
2010 年 5 月 |
重组;更新了命令和选项。 |
客户反馈 |