-tsa 或 -tsacert 小程序 jar 自签名的时间戳

问题描述 投票:0回答:5

当我尝试在罐子中进行自我签名时,如下所示。

jarsigner -keystore my keystore myjar.jar myalias

它会发出如下警告:

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

请帮忙解决问题。

java jar applet signed-applet
5个回答
66
投票

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-turk 的评论)

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


23
投票
此警告告诉您,您的 jar 证书将在五月份过期。因此,在此日期之后用户将无法执行您的程序。

为了改善这种情况,添加了时间戳功能。这样,您可以告诉用户:“我在此时使用了该证书(由时间戳机构 - tsa 提供并验证),当时它仍然有效!”只要您不更改和放弃您的 jar,即使在证书过期后,它仍然会运行,因为用户会看到在创建时证书确实有效。

供参考:

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

tl;dr:如果您忽略警告,您的 jar 在 2008 年 5 月 14 日之后将不会运行。添加时间戳,只要你不修改任何东西,它仍然会运行。

问候


3
投票
我也面临着同样的问题。如果没有时间戳,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
中的要一样。


0
投票
答案中的时间戳网址 (

http://sha256timestamp.ws.symantec.com/sha256/timestamp) 在 7/24/2024 后将不再有效

最新时间戳网址为:

    timestamp.digicert.com
  • 216.168.244.9

注释解释:

2024 年 7 月 24 日 17:00 MDT(23:00 UTC)DigiCert 将关闭我们的旧赛门铁克时间戳服务。如果您或客户在签署可执行文件或文档时使用时间戳,您可能需要在关闭之前将签名工具中的时间戳 URL 更改为较新的 DigiCert 服务,timestamp.digicert.com。


-17
投票
如果使用 JDK Java/Oracle 1.7 u51 进行更新,则会导致此错误。这个 JDK 与之前的不一样。

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

然后,当你重新编译时,你就不会看到错误了。

© www.soinside.com 2019 - 2024. All rights reserved.