对 JAR 文件进行签名可以让用户验证发布者。
使用 jarsigner 命令行工具对 JAR 文件进行签名。它将使用 jar 属性中指定的命名文件,以及可选的 destDir 或 signedJar 属性。也支持嵌套路径;这里只允许使用(可选的)destDir。如果没有提供目标目录或显式 JAR 文件名,则 JAR 文件将在原地进行签名。
依赖规则
true,则只有在 JAR 文件不包含此别名的签名时才会对其进行签名。
false,则会对 JAR 文件进行签名。
属性 | 描述 | 必需 |
---|---|---|
jar | 要签名的 JAR 文件 | 是,除非使用了嵌套路径 |
alias | 要签名的别名 | 是 |
storepass | 密钥库完整性的密码。Ant 不会使用 -storepass 命令行参数,而是在提示时将密码发送给 jarsigner。 |
是 |
keystore | 密钥库位置 | 否 |
storetype | 密钥库类型 | 否 |
keypass | 私钥密码(如果不同) | 否 |
sigfile | .SF/.DSA 文件的名称 | 否 |
signedjar | 已签名 JAR 文件的名称。只有在设置了 jar 属性时才能设置此属性。 | 否 |
verbose | (true|false)签名时的详细输出 |
否;默认值为 false |
strict | (true|false)签名时的严格检查。 自 Ant 1.9.1 起. |
否;默认值为 false |
internalsf | (true|false)在签名块中包含 .SF 文件 |
否;默认值为 false |
sectionsonly | (true|false)不计算整个清单的哈希值 |
否;默认值为 false |
lazy | 用于控制签名文件的存在是否意味着 JAR 文件已签名的标志。这仅在目标 JAR 文件与源 JAR 文件匹配时使用 | 否;默认值为 false |
maxmemory | 指定 jarsigner JVM 将使用的最大内存。以标准 Java 内存规范的风格指定(例如 128m= 128 兆字节) |
否 |
preservelastmodified | 使已签名文件具有与原始 JAR 文件相同的最后修改时间。 | 否;默认值为 false。 |
tsaurl | Java 5+ 中时间戳 JAR 文件的时间戳颁发机构的 URL | 否 |
tsacert | 密钥库中时间戳颁发机构的别名,用于 Java 5+ 中时间戳 JAR 文件 | 否 |
tsaproxyhost | 连接到 TSA 服务器时要使用的代理主机 | 否 |
tsaproxyport | 连接到 TSA 服务器时要使用的代理端口 | 否 |
executable | 指定要使用的特定 jarsigner 可执行文件,以代替默认的二进制文件(位于与 Apache Ant 运行的相同 JDK 中)。 必须支持与 Sun JDK jarsigner 命令相同的命令行选项。自 Ant 1.8.0 起。 |
否 |
force | 是否强制对 JAR 文件进行签名,即使它似乎没有过期或已经签名。自 Ant 1.8.0 起。 | 否;默认值为 false |
sigalg | 签名算法的名称 | 否 |
digestalg | 摘要算法的名称 | 否 |
tsadigestalg | TSA 摘要算法的名称。自 Ant 1.10.2 起 | 否 |
providername | 在安全属性文件中列出时,加密服务提供程序的名称。自 Ant 1.10.6 起。 | 否 |
providerclass | 加密服务提供程序的主类文件名称,当服务提供程序未在安全属性文件中列出时。自 Ant 1.10.6 起。 | 否 |
providerarg | 表示 providerclass 的构造函数的可选字符串输入参数。如果未设置 providerclass ,则忽略此参数。自 Ant 1.10.6 起。 |
否 |
属性 | 描述 | 必需 |
---|---|---|
path | 要签名的 JAR 文件的路径。自 Ant 1.7 起 | 否 |
fileset | 要签名的 JAR 文件的文件集。 | 否 |
mapper | 用于在签名期间重命名 JAR 文件的映射器 | 否,并且只能提供一个 |
sysproperty | JVM 系统属性,使用 Ant 环境变量 的语法 | 否,并且只能提供一个 |
arg | 使用此参数指定未通过属性显式支持的 keytool 命令行参数。自 Ant 1.10.6 起。 | 否 |
有关生成代码签名证书的说明,请参阅 keytool 文档 和/或证书颁发机构的说明。
使用别名 apache-group
对 ant.jar 进行签名,并通过 secret
密码访问密钥库和私钥。
<signjar jar="${dist}/lib/ant.jar" alias="apache-group" storepass="secret"/>
对所有匹配 dist/**/*.jar 模式的 JAR 文件进行签名,并将它们复制到目录 signed 中。flatten 映射器意味着它们将全部复制到此目录,而不是复制到子目录中。
<signjar destDir="signed" alias="testonly" keystore="testkeystore" storepass="apacheant" preservelastmodified="true"> <path> <fileset dir="dist" includes="**/*.jar"/> </path> <flattenmapper/> </signjar>
对 dist/**/*.jar 中的所有 JAR 文件进行就地签名。使用延迟签名,因此只有在文件未签名时才会对其进行签名。
<signjar alias="testonly" keystore="testkeystore" storepass="apacheant" lazy="true"> <path> <fileset dir="dist" includes="**/*.jar"/> </path> </signjar>
使用摘要算法 SHA1 和签名算法 MD5withRSA 对 dist/**/*.jar 中的所有 JAR 文件进行签名。这在您想使用 JDK 7 jarsigner(使用 SHA256 和 SHA256withRSA 作为默认值)创建将在不支持 SHA256 和 SHA256withRSA 的平台上部署的已签名 JAR 文件时特别有用。
<signjar alias="testonly" keystore="testkeystore" storepass="apacheant" sigalg="MD5withRSA" digestalg="SHA1"> <path> <fileset dir="dist" includes="**/*.jar"/> </path> </signjar>
时间戳记录签名发生的日期和时间,允许在该时间点验证签名。使用可信时间戳,用户可以验证签名是在证书过期或吊销之前发生的。如果没有此时间戳,用户只能验证其当前日期的签名。
时间戳 JAR 文件是在 Java 5 中引入的;自 Ant 1.7 起支持它们。自 Ant 1.9.5 起,可以使用未经身份验证的代理访问 TSA。
常见的公共时间戳颁发机构包括