applet jar的-tsa或-tsacert时间戳自签名

时间:2014-02-11 07:18:36

标签: java jar applet signed-applet

当我试图在下面的罐子里自我签名时。

jarsigner -keystore my keystore myjar.jar myalias

它会发出警告:

  

未提供-tsa或-tsacert且此jar没有带时间戳。如果没有时间戳,用户可能无法在签名者证书的到期日期(2014-05-08)之后或任何未来的撤销日期之后验证此jar。

请帮助解决问题。

4 个答案:

答案 0 :(得分:59)

最近的Java 7提供了一个(礼貌的?)关于已经存在十年的事情的警告......

Trusted Timestamping在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不处理自签名证书)

更新:

尝试为自签名证书加时间戳的网址:

  • 赛门铁克:-tsa http://sha256timestamp.ws.symantec.com/sha256/timestamp(根据brad-turek的评论)

对于专用网络,可以考虑内部时间戳权限,例如Thales(nCipher)时间戳服务器(或历史上的OpenTSA)

答案 1 :(得分:21)

此警告告诉您罐子的证书将于5月到期。因此,用户将无法在此日期之后执行您的程序。

为了改善这种情况,添加了时间戳功能。通过这种方式,您可以告诉用户:“我在这个时间点使用了证书(由时间戳代理商提供并验证 - tsa),当它仍然有效时!”只要您不更改并重新签名您的jar,即使证书过期,它仍然会运行,因为用户看到在创建时证书确实有效。

供参考:http://docs.oracle.com/javase/7/docs/technotes/guides/security/time-of-signing.html

tl; dr:如果忽略警告,你的jar将在14-05-08之后无法运行。添加时间戳,只要您不修改任何内容,它就会一直运行。

此致

答案 2 :(得分:1)

我遇到了同样的问题。没有时间戳,jar就不会签名。

当您添加-tsa http://timestamp.digicert.com时,它不会发出任何警告或错误,但仍然不会对jar进行签名。

但后来我添加了以下部分,它对我有用。

-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中的PL/pgSQL应该相同。

答案 3 :(得分:-17)

如果使用JDK Java / Oracle 1.7 u51进行更新,则会导致此错误。这个JDK与前一个JDK不同。

您可以安装以前版本的JDK BEFORE u51(例如1.7u45),或安装JDK 6.

然后,当您重新编译时,您将看不到错误。