Java Apple在签名过的jar包上重新签名

本文介绍如何删除原有签名并重新签名jar包的过程,包括使用keytool工具生成keystore文件、使用jarsigner工具签名和验证签名等步骤。

有时候我们签名过的jar包因为某些原因更改过了,需要重新签名下,这个时候我们就需要删除原来的签名信息才能重新签名,不然会影响后面的签名。

1.删除原有签名信息

删除原有签名jar包META-INF文件夹下的三个文件,最好再把旧jar包改个名,后面会用到,这样我们生成的jar包的名字也就和我们原有的名字一样了。

2.使用java的keytool工具生成keystore文件

找到就旧jar包的目录下,按住shift,右键,然后选择“在此打开窗口命令”,执行签名命令

2.1.生成密钥库和带有别名的证书

keytool -genkey -keystore myKeyStore.ks -storepass myStor3pass -keypass myK3ypass -alias myCert -validity 3650

这个命令把密码和使用时间也写死了,年限是10年。执行命令后会要填写一些信息,填写完后输入y,表示完成。

2.2.查看密钥库的证书(可不执行)

keytool -list -v -alias myCert -keystore myKeyStore.ks -storepass myStor3pass

执行这个命令主要是为了查看我们刚刚填写的信息。

2.3.使用jarsinger给jar进行签名

jarsigner -keystore myKeyStore.ks -storepass myStor3pass -keypass myK3ypass -signedjar new.jar old.jar myCert

这里的old.jar使我们原来的jar包,new.jar使我们执行命令新生成的jar包,注意,两个名字不能一样。其中myCert指定了证书的名称。用winzip打开new.jar,会发现META-INF多出了MYCERT.SF(签名信息),MYCERT.DSA(证书)两个文件。

注:命令行不指定密钥库口令和证书的口令也可以,如:   

jarsigner -verbose -keystore myKeyStore.ks -signedjar new.jar old.jar myCert 

 这样,系统会让你分别输入密钥库口令短语和myCert的密钥口令,输入正确后,会生成签名的jar。

2.4.使用jarsinger验证签名的jar

下面命令用来验证签名的jar是否没被篡改。

jarsigner -verify new.jar

返回结果:

jar 已验证。

说明jar验证成功。也可以打印验证的详细信息

jarsigner -verify -verbose eos-spring-signed.jar

2.5.注意

如果我们修改jar中一个文件,如com/primeton/spring/xsd/spring-util.xsd, 再次验证,会出现这个错误:

jarsigner: java.lang.SecurityException: SHA1 digest error for com/primeton/spring/xsd/spring-util.xsd

注意: 遗憾的是,直接使用jarsigner验证jar签名有一定的缺憾,jarsigner只能验证被修改过的jar内部class或其他文件,对于删除的class或文件是不报错的,对于增加的类或资源文件只报警告错误,如"此 jar 包含尚未进行完整性检查的未签名条目"。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值