|
SignTool.exe(签名工具)
签名工具是一个命令行工具,用于对文件进行数字签名,验证文件和时间戳文件中的签名。
安装 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
要进行签名的文件的路径。
签名工具支持下列命令。 每个命令使用不同的选项集,这些选项集被列在它们相应的节中。
Command
描述
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 密码
指定打开 PFX 文件时使用的密码。 (使用 /f 选项指定 PFX 文件。)
/ph
如果支持,则生成执行文件的页面哈希。
/r RootSubjectName
指定签名证书必须链接到的根证书的主体名称。 该值可以是根证书的整个主题名称的子字符串。
/s StoreName
指定要在搜索证书时打开的存储区。 如果未指定该选项,则打开
My
存储。
/sha1 哈希
指定签名证书的 SHA1 哈希。
/sm
指定使用一个计算机存储区,而不是使用用户存储区。
/t URL
指定时间戳服务器的 URL。 如果该选项(或 /tr)不存在,将不会对签名文件执行时间戳操作。 如果时间戳操作失败,将生成一个警告。 此选项不能与 /tr 选项一起使用。
/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)的使用情况。
时间戳命令选项
下表列出了可用于 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。 PlatformID 表示 PlatformID 枚举成员的基础值。
/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.verisign.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.verisign.com/scripts/timstamp.dll MyFile.exe以下命令验证已经签名的文件。
signtool verify MyFile.exe以下命令验证可能已经在目录中签过名的系统文件。
signtool verify /a SystemFile.dll以下命令验证在名为
MyCatalog.cat
目录中已签字的系统文件。
signtool verify /c MyCatalog.cat SystemFile.dll
|
|