-tsa或-tsacert时间戳用于applet jar自签名
当我试图自我签署下面的jar子。
jarsigner -keystore my keystore myjar.jar myalias
它给出了如下警告:
没有-tsa或-tsacert提供,这个jar子没有时间戳。 如果没有时间戳,用户可能无法在签署者证书的有效date(2014-05-08)之后或将来的任何撤销date之后validation此jar。
请帮助解决问题。
最近的Java 7提供了一个(礼貌?)警告,这个警告已经存在十年了。
受信任的时间戳在Java 5(2004)中引入。 动机是,当证书过期时,开发人员不会被迫“每年重新签署已部署的JAR文件”。
→ http://docs.oracle.com/javase/1.5.0/docs/guide/security/time-of-signing.html
基于URL的时间戳机构(TSA)通常由颁发证书颁发机构(CA)提供, 用于处理 CA颁发的相同证书 。 例如,digicert tsa url可以被访问如下:
jarsigner -tsa http://timestamp.digicert.com [.. other options]
→ http://www.digicert.com/code-signing/java-code-signing-guide.htm
因为(1)TSA时间戳需要是一个可信任的交易(它排除了“自我时间戳”),并且(2)典型的TSA URL被设置为与之一起工作,所以使用自签名证书的时间戳可能是难以实现的目标由同一CA组织提供的证书(即TSA URL不处理自签名证书)
更新:
尝试使用自签名证书时间戳的URL:
- 赛门铁克:
-tsa http://sha256timestamp.ws.symantec.com/sha256/timestamp
(根据brad-turek的评论)
对于专用networking,可以考虑诸如Thales(nCipher)时间戳服务器(或历史上的OpenTSA)之类的内部时间戳授权,
这个警告告诉你,你的jar的证书将在5月到期。 因此,用户将无法在此date之后执行您的程序。
为了改善这种情况,添加了时间戳function。 这样,你可以告诉用户:“我在这个时候使用了证书(这是由时间戳机构提供和validation的 – tsa),当它仍然有效!” 只要你不改变和辞职你的jar,即使在证书过期之后,它仍然会运行,因为用户在创build时certificate证书确实是有效的。
以供参考: http : //docs.oracle.com/javase/7/docs/technotes/guides/security/time-of-signing.html
tl; dr:如果你忽略这个警告,你的jar在14-05-08之后将不会运行。 添加一个时间戳,只要你不修改任何东西,它仍然会运行。
问候
我面临同样的问题。 没有时间戳,jar就不会被签名。
当你添加-tsa http://timestamp.digicert.com
,它不会给出任何警告或错误,但仍然不会被签名。
但后来我添加了以下部分,它为我工作。
-tsacert alias
所以,基本上我最后的命令是
jarsigner -verbose -tsa http://timestamp.digicert.com -tsacert alias -sigalg SHA256withRSA -digestalg SHA1 -keystore my-release-key.keystore android-release-unsigned.apk alias_name
记住命令中的alias_name
和keystore
的一个应该是相同的。
如果使用JDK Java / Oracle 1.7 u51进行更新,则会导致此错误。 这个JDK和前一个不一样。
您可以安装先前版本的JDK BEFORE u51(例如7u45)或安装JDK 6。
那么当你重新编译时,你将不会看到错误。