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 –tsa http://sha256timestamp.ws.symantec.com/sha256/
如何校验已签名JAR文件
要校验已签名的JAR文件(bundle.jar
)的签名合法性以及是否未被更改过,运行如下命令:
jarsigner -verify bundle.jar
jar verified. #表明校验成功。否则将出现错误信息。
注意:你可使用
jarsigner -verify -verbose 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 smk 2752 Fri Sep 26 16:12:30 PDT 1997 AclEx.class smk 849 Fri Sep 26 16:12:46 PDT 1997 test.class s = signature was verified m = entry is listed in manifest k = at least one certificate was found in keystore jar 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文件中遇到问题,可致电021-58895880-606与我们联系。