警告: 未提供 -tsa 或 -tsacert, 此 jar 没有时间戳。
签名时间戳会有警告, 在某些手机上会报签名失败
警告对于程序员来说也要十分重视,不然不知道以后会在哪里给自己挖坑
在给生成的apk签名,jdk1.6升级到jdk1.7会出现以下问题:
- 明明签名了,并且签名检查apk中也有签名文件,但是安装的时候就是提示安装失败,没有签名,解决办法
将签名命令上加一段话: -digestalg SHA1 -sigalg MD5withRSA 加上后就可以了
旧:jarsigner -keystore test.keystore -storepass test123 -signedjar signed_client.apk client.apk test
新:jarsigner -digestalg SHA1 -sigalg MD5withRSA -keystore
test.keystore -storepass test123 -signedjar signed_client.apk client.apk
test
这样签名完成后就可以安装成功了。
- 以上方法可以解决签名后不能安装成功的问题,但是会发现有警告:
警告:
未提供 -tsa 或 -tsacert, 此 jar 没有时间戳。如果没有时间戳, 则在签名者证书的到期
日期 (2063-07-18) 或以后的任何撤销日期之后, 用户可能无法验证此 jar。
入有这个警告的话本身对签名没有影响,但是总感觉怪怪的,要想去掉这个警告只要在命令上再加上 -tsa https://timestamp.geotrust.com/tsa 就可以了
最终命令是:
jarsigner -digestalg SHA1 -sigalg MD5withRSA -tsa https://timestamp.geotrust.com/tsa -keystore test.keystore -storepass test123 -signedjar signed_client.apk client.apk test
什么是时间戳?
时间戳(mestamp)是指在一我们签好名的代码中加入辨识文字,如时间或日期,用以保障本地端资料更新顺序与远端服务器端一致。 如下时间戳范例: 2006-05-29 T 10:45 UTC 2008-12-05 T 11:20 UTC Sat Jul 23 06:18:23 2006
时间戳在代码签名证书中的应用
VeriSign 或 Thawte代码签名证书可支持一到三年有效期。一般我们开发的软件的生命周期都会更长,为了保证用数字证书签名后的软件代码在证书到期后仍然有效,我们就必须使用时间戳技术。当我们对代码进行数字签名时,将会产生希哈值发送给时间戳服务器进行时间戳反签名。这样,当用户下载签名代码后,IE等网络浏览器将进行鉴别: (a) 如果是代码签名证书已经过期,用该证书签名的软件代码将不会被信任;(b) 用有效的代码签名证书签名的代码,即使代码签名证书已经到期,但代码仍然是可信的。维瑞代理VeriSign、Thawte代码签名证书免费为客户提供时间戳服务,是为了方便软件开发商可以不用担心由于代码签名证书过期而影响在有效期内已经签名的代码的正常的使用,也就是说,在代码签名证书有效期内签名的代码使用时间戳后永远不会过期。
免费时间戳URL
目前列出的时间戳服务都在国外;在添加时间戳的时候,要确保的你的网络能访问国外,否则会签名不成功。Verisign 时间戳URL: http://timestamp.verisign.com/scripts/timstamp.dll Comodo 时间戳URL: http://timestamp.comodoca.com/authenticode GeoTrust/TrustCenter: http://www.trustcenter.de/codesigning/timestamp
所以最终的编译命令是:
jarsigner -digestalg SHA1 -sigalg MD5withRSA -tsa http://timestamp.comodoca.com/authenticode -verbose -keystore mtp.jks -signedjar t.apk ke.apk key0 -storepass mima11111 -keypass mima22222
参考链接:签名时间戳链接