我正在使用Java技术开发一个Java桌面应用程序。我使用有效的证书对我的应用程序进行签名,并使用JnlpDownloadServlet进行部署。我用maven-webstart-plugin准备了所有这些基础设施。
但是,当我的证书到期时,我不得不辞职并重新部署我的应用程序,我在让webstart重新下载我的应用程序时遇到了问题。
据我所知,基于我可以从Internet收集的内容(Webstart官方文档很糟糕),默认情况下,webstart检查版本并根据文件服务器时间更新库(最后修改的HTTP头)
如果这是真的,webstart客户端应该完全下载我的应用程序的新版本。
但是,webstart只是在下载JNLP文件中具有更新版本号的库,因为maven webstart插件会生成这些库。
应用程序无法启动,抱怨不同的签名JAR,当我查看tomcat访问日志时,服务器中唯一被选中和加载的文件是JNLP文件、具有新版本的JAR和另一个JAR(假设这是下载、签名-检查和使客户端失败的JAR)所有请求都是GETs,没有头。
我是,不是,而是使用JNLP中基于版本的协议(由jnlp.versionEnabled属性激活),但是webstart客户端的行为就像打开了它一样。
我的JNLP更新选项是
<update check="always" policy="always" />我看到的唯一解决方案是更新所有JAR的版本号,并附加到版本号中,但是JNLP的“呈现化”是由webstart插件自动完成的,我更喜欢一种更简单、更健壮的方法。
想法?
编辑: JNLP文件中的jar元素具有version属性,因此触发了基于版本的下载协议。这是由webstart插件自动添加的。在管理依赖关系版本时,这是一个很好的功能。但如果你只想更新签名,那就太痛苦了。
发布于 2015-03-24 11:51:41
我发现,因为1.5 Java支持验证过期签名(如果它们是时间戳的话):
http://docs.oracle.com/javase/tutorial/deployment/jar/signing.html
这里也很好地解释了这一点:https://stackoverflow.com/a/24178906/134898
幸运的是,maven-webstart-plugin支持这一点,因为版本1.0-beta5 5:
<sign>
<storetype>pkcs12</storetype>
...
<tsaLocation>https://timestamp.geotrust.com/tsa</tsaLocation>
</sign>现在,webstart客户端将接受该应用程序,只要时间戳有效,即使我的签名证书过期。(我使用私人CA证书和过期的签名证书进行了测试)
我将继续使用基于webstart版本的协议在我的库中进行真正的更改,这将触发独立的JAR下载,一切都很好,世界是美好的。
https://stackoverflow.com/questions/29084155
复制相似问题