Jarsigner是Java Development Kit (JDK)提供的针对Java Archive (JAR) 包签名的通用工具,并校验已签名的JAR文件的签名和完整。通过阅读此文,你将会了解如何使用jarsigner签署JAR文件。

前提条件

  • JDK 1.7及以上版本

  • 已获取代码签名证书。有关获取数字证书方法,可参阅如何获取数字证书

如何签名JAR文件

假设有一个JAR文件名为bundle.jar,你希望对密钥库中用户的私钥进行签名。则运行下列命令:

jarsigner -keystore <jks密钥文件> -storepass <秘钥库密码> keypass <私钥密码> <密钥对别名> -tsa <时间戳>

注意:在有网络的Windows环境下,当d:\\1文件夹下有1.jks (密码是123123)和1.jar文件,则时间戳(TSA)是可选的。其命令为:

D:  (切换至d)Cd 1  (进入1文件夹)Jarsigner  –keystore  1.jks –storepass 123123  1.jar  mykey  –tsahttp://sha256timestamp.ws.symantec.com/sha256/

如何校验已签名JAR文件

要校验已签名的JAR文件(bundle.jar)的签名合法性以及是否未被更改过,运行如下命令:

jarsigner -verify bundle.jarjar verified.  #表明校验成功。否则将出现错误信息。

注意:你可使用jarsigner -verify -verbose bundle.jar命令获得更多的信息。
其输出为:

198 Fri Sep 26 16:14:06 PDT 1997 META-INF/MANIFEST.MF199 Fri Sep 26 16:22:10 PDT 1997 META-INF/name.SF1013 Fri Sep 26 16:22:10 PDT 1997 META-INF/name.DSAsmk   2752 Fri Sep 26 16:12:30 PDT 1997 AclEx.classsmk    849 Fri Sep 26 16:12:46 PDT 1997 test.classs = signature was verifiedm = entry is listed in manifestk = at least one certificate was found in keystorejar verified.

如何校验代码签名证书信息

添加-certs参数即可,即运行如下命令行:

jarsigner -keystore <jks密钥文件> -verify -verbose -certs bundle.jar

其输出结果包括该JAR文件(bundle.jar)的每个签名人的证书信息,大致上如下所示:

  198 Fri Sep 26 16:14:06 PDT 1997 META-INF/MANIFEST.MF  199 Fri Sep 26 16:22:10 PDT 1997 META-INF/name.SF  1013 Fri Sep 26 16:22:10 PDT 1997 META-INF/name.DSA  208 Fri Sep 26 16:23:30 PDT 1997 META-INF/JAVATEST.SF  1087 Fri Sep 26 16:23:30 PDT 1997 META-INF/JAVATEST.DSA  smk   2752 Fri Sep 26 16:12:30 PDT 1997 Tst.class    X.509, CN=Test Group, OU=Java Software, O=Sun Microsystems, L=CUP, S=CA, C=US (javatest)  #表明签名人的特征名信息(需签名人的证书是X.509证书)。  X.509, CN=name, OU=Java Software, O=Sun, L=cup, S=ca, C=us (name)   #(name)表明签名人在密钥库中别名(需JAR文件中的公钥证书与密钥仓库项中的证书匹配)。    s = signature was verified  m = entry is listed in manifest  k = at least one certificate was found in keystore jar verified.

更多信息

在使用jarsigner工具签名JAR文件中遇到问题,可致电0512-56969630与我们联系。