转自: https://help.trustasia.com/how-to-use-code-signing-certificates-on-jar-files/
Jarsigner是Java Development Kit (JDK)提供的针对Java Archive (JAR) 包签名的通用工具,并校验已签名的JAR文件的签名和完整。通过阅读此文,你将会了解如何使用jarsigner签署JAR文件。
签名jar:
jarsigner [选项] jar 文件别名
jarsigner -verify [选项] jar 文件
参数说明:
[-keystore ] 密钥库位置
[-storepass ] 用于密钥库完整性的口令
[-storetype ] 密钥库类型
[-keypass ] 专用密钥的口令(如果不同)
[-sigfile ] .SF/.DSA 文件的名称
[-signedjar ] 已签名的 JAR 文件的名称
[-digestalg ] 摘要算法的名称
[-sigalg ] 签名算法的名称
[-verify] 验证已签名的 JAR 文件
[-verbose] 签名/验证时输出详细信息
[-certs] 输出详细信息和验证时显示证书
[-tsa ] 时间戳机构的位置
[-tsacert ] 时间戳机构的公共密钥证书
[-altsigner ] 替代的签名机制的类名
[-altsignerpath ] 替代的签名机制的位置
[-internalsf] 在签名块内包含 .SF 文件
[-sectionsonly] 不计算整个清单的散列
[-protected] 密钥库已保护验证路径
[-providerName ] 提供者名称
[-providerClass 加密服务提供者的名称
[-providerArg ]] ... 主类文件和构造函数参数
假设有一个JAR文件名为bundle.jar
,你希望对密钥库中用户的私钥进行签名。则运行下列命令:
jarsigner -keystore -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文件(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 -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.