如何使用Java Webstart应用程序管理证书续订

时间:2015-03-16 18:19:33

标签: java java-web-start jnlp

我正在使用Java Webstart技术开发Java桌面应用程序。 我使用有效证书签署我的应用程序,并使用JnlpDownloadServlet进行部署。 我使用maven-webstart-plugin准备了所有这些基础设施。

但是当我的证书到期并且我必须辞职并重新部署我的应用程序时,我遇到了使webstart完全重新下载我的应用程序的问题。

据我所知,基于我可以从Internet收集的内容(Webstart官方文档很糟糕),默认情况下,webstart会根据文件服务器时间检查版本并更新库(Last-Modified HTTP标头)

如果是这样,webstart客户端应该完全下载我的应用程序的新版本。

但是,webstart只是在JNLP文件中下载具有更新版本号的库,因为maven webstart插件会生成它们。

应用程序无法启动,抱怨不同的签名JAR,当我查看tomcat访问日志时,服务器中唯一已检查和已下载的文件是JNLP文件,具有真正较新版本的JAR和另一个JAR (我假设这是下载,签名检查,并使客户端失败的那个)所有请求都是GET,没有HEADs

使用JNLP中的基于版本的协议(由jnlp.versionEnabled属性激活),但webstart客户端的行为就像它已经开启一样。

我的JNLP更新选项是

<update check="always" policy="always" />

我看到的唯一解决方案是更新所有JAR的版本号,在版本号上附加内容,但JNLP“renderization”由webstart-plugin自动完成,我更喜欢更简单,更健壮的方法。 / p>

想法?

修改 看起来基于版本的下载协议正在被触发,因为JNLP文件中的jar元素具有version属性。这是由webstart插件自动添加的。在管理依赖项版本时,这是一项很棒的功能。但如果您只想更新签名,那就太痛苦了。

1 个答案:

答案 0 :(得分:2)

我发现由于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开始就支持这个:

    <sign>
        <storetype>pkcs12</storetype>
        ...
        <tsaLocation>https://timestamp.geotrust.com/tsa</tsaLocation>
    </sign>

现在,只要时间戳有效,即使我的签名证书过期,webstart客户端也会接受该应用程序。 (我使用私有CA证书和过期的签名证书进行了测试)

我将继续使用基于webstart版本的协议来实现我的库中的真正更改,这将触发独立的JAR下载,一切都很好,世界很美。