使用jarsigner签名JAR文件

转自: https://help.trustasia.com/how-to-use-code-signing-certificates-on-jar-files/

使用jarsigner签名JAR文件

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

前提条件

  • JDK 1.7及以上版本。
  • 已获取代码签名证书。

相关命令

签名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文件

假设有一个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文件

要校验已签名的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.

你可能感兴趣的:(签名证书,java)