签名 JAR 文件

您可以使用 JAR 签名和验证工具对 JAR 文件签名并为签名加上时间戳。您使用jarsigner命令调用 JAR 签名和验证工具,因此我们将其简称为“ Jarsigner”。

要签名 JAR 文件,必须首先具有一个私钥。私钥及其关联的公钥证书存储在称为* keystores 的受密码保护的数据库中。密钥库可以保存许多潜在签名者的密钥。密钥库中的每个密钥都可以由 alias *标识,别名通常是拥有密钥的签名者的名字。例如,属于 Rita Jones 的密钥可能具有别名“ rita”。

签名 JAR 文件的命令的基本形式是

jarsigner jar-file alias

在此命令中:

Jarsigner 工具将提示您 Importing 密钥库和别名的密码。

该命令的基本形式假定要使用的密钥库位于主目录中名为\.keystore的文件中。它将创建名称分别为x\.SFx\.DSA的签名和签名块文件,其中x是别名的前八个字母,都转换为大写。这个基本命令将用签名的 JAR 文件覆盖原始 JAR 文件。

实际上,您可能想使用一个或多个可用的命令选项。例如,鼓励给签名加上时间戳,以便用于部署应用程序的任何工具都可以在签名文件时验证用于签名 JAR 文件的证书是否有效。如果未包含时间戳,则 Jarsigner 工具会发出警告。

选项位于jar\-file路径名之前。下表描述了可用的选项:

*** Jarsigner 命令选项** *

Option Description
\-keystore网址 指定您不想使用\.keystore默认数据库时要使用的密钥库。
\-sigfile个文件 如果您不希望从别名中获取基本名称,请指定.SF 和.DSA 文件的基本名称。文件必须仅由大写字母(A-Z),数字(0-9),连字符(-)和下划线(_)组成。
\-signedjar个文件 如果您不希望原始未签名的文件被签名的文件覆盖,则指定要生成的签名的 JAR 文件的名称。
\-tsa网址 使用 URL 标识的时间戳颁发机构(TSA)为签名生成时间戳。
\-tsacert别名 使用由别名标识的 TSA 的公钥证书为签名生成时间戳。
\-altsigner 指示使用其他签名机制为签名加上时间戳。完全限定的类名称标识使用的类。
\-altsignerpathClasspath 列表 提供由altsigner选项标识的类的路径以及该类所依赖的任何 JAR 文件。

Example

让我们看几个使用 Jarsigner 工具签名 JAR 文件的示例。在这些示例中,我们将假设以下内容:

在这些假设下,您可以使用此命令对名为app\.jar的 JAR 文件进行签名:

jarsigner -keystore mykeys -tsa http://tsa.url.example.com app.jar johndoe

系统将提示您 Importing 密钥库和别名的密码。由于此命令未使用\-sigfile选项,因此它创建的.SF 和.DSA 文件将被命名为JOHNDOE\.SFJOHNDOE\.DSA。由于该命令不使用\-signedjar选项,因此生成的签名文件将覆盖app\.jar的原始版本。

让我们看看如果使用其他选项组合会发生什么:

jarsigner -keystore mykeys -sigfile SIG -signedjar SignedApp.jar 
          -tsacert testalias app.jar johndoe

签名和签名块文件将分别命名为SIG\.SFSIG\.DSA,并且已签名的 JAR 文件SignedApp\.jar将放置在当前目录中。原始的未签名的 JAR 文件将保持不变。同样,签名将带有标记为testalias的 TSA 公钥证书的时间戳。

Additional Information

有关 JAR 签名和验证工具的完整参考页,请在线访问:安全工具摘要

Note:

自签名证书后,UNKNOWN将显示为应用程序的发布者。有关更多信息,请参见从被列为 UNKNOWN 的发布者处运行应用程序是否安全?

首页